rawstring表示的问题在于,您无法以可移植的方式(即,不使用控制字符)来表示所有内容。例如,如果您的字符串中有换行符,则必须将字符串从字面上断开到下一行,因为它不能表示为rawstring。
也就是说,获取原始字符串表示形式的实际方法是您已经提供的:
"r'{}'".format(regex.pattern)
rawstrings的定义是没有应用任何规则,只是它们以它们开头的引号结尾,并且您可以使用反斜杠转义该引号。因此,例如,您不能像
""原始字符串表示形式那样存储等效的字符串(
r""产生SyntaxError和
r"\"yields
"\")。
如果您确实要执行此 *** 作,则应使用类似以下的包装器:
def rawstr(s): """ Return the raw string representation (using r'') literals of the string *s* if it is available. If any invalid characters are encountered (or a string which cannot be represented as a rawstr), the default repr() result is returned. """ if any(0 <= ord(ch) < 32 for ch in s): return repr(s) if (len(s) - len(s.rstrip("\"))) % 2 == 1: return repr(s) pattern = "r'{0}'" if '"' in s: if "'" in s: return repr(s) elif "'" in s: pattern = 'r"{0}"' return pattern.format(s)
测试:
>>> test1 = "\">>> test2 = "foobar n">>> test3 = r"a valid rawstring">>> test4 = "foo \\">>> test5 = r"foo \">>> test6 = r"'">>> test7 = r'"'>>> print(rawstr(test1))'\'>>> print(rawstr(test2))'foobar n'>>> print(rawstr(test3))r'a valid rawstring'>>> print(rawstr(test4))'foo \\'>>> print(rawstr(test5))r'foo \'>>> print(rawstr(test6))r"'">>> print(rawstr(test7))r'"'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)