昨天,我得到了正则表达式匹配的帮助,这个匹配作为一个独立的。但是当放入这段代码时,我得到了"伪造逃脱错误"。代码和回溯如下。你能指点我做错了吗?
#!/usr/bin/env python
import re
sf = open("a.txt","r")
out = open("b.txt","w")
regex = re.compile(r'Merging\s+\d+[^=]*=\s*\'\w+@\w+\x\w+\'\\"')
for line in sf:
m = regex.findall(line)
for i in m:
print >> out,line,
追溯是:
追踪(最近一次通话):
File "match.py", line 6, in <module> regex = re.compile(r'Merging\s+\d+[^=]*=\s*\'\w+@\w+\x\w+\'\\"') File "/usr/lib/python2.7/re.py", line 190, in compile return _compile(pattern, flags) File "/usr/lib/python2.7/re.py", line 242, in _compile raise error, v # invalid expression sre_constants.error: bogus escape: '\\x'
答案 0 :(得分:4)
\x
不是有效的特殊序列。如果您要匹配文字\x
,则需要使用\\x
转义反斜杠,或者如果您需要其他内容,请使用valid one,例如\w
这将编译:
re.compile(r'Merging\s+\d+[^=]*=\s*\'\w+@\w+\\x\w+\'\\"')
答案 1 :(得分:1)
\x
后面必须跟一个十六进制值(即正好两个十六进制数字):
>>> '\x61'
'a'
>>> '\x'
File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
如果您想匹配文字 \x
,则可以转义反斜杠,以便x
不会被转义:\\x
。