[英]Searching for a string containing literal brackets with a Python Regular Expression
Date = re.search('%s(.*)%s' % ("DateCreated:", "] [TotalTime:"), find_all(Text("Exam"))[0].value).group(1)
我收到一个错误“正则表达式意外结束”。 我的猜测是它不接受代码中的“] [”部分。
使用re.escape()
可以对字符串进行转义,以便可以将其用作正则表达式中的文字。
观察:
>>> re.search(re.escape('] ['), 'foo ] [ bar')
<_sre.SRE_Match object at 0x105a956b0>
>>> re.search('] [', 'foo ] [ bar')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 146, in search
return _compile(pattern, flags).search(string)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: unexpected end of regular expression
当然,在您的直接情况下,您只想转义要在它们之间搜索的两个文字字符串:
re.search('%s(.*)%s' % (re.escape("DateCreated:"),
re.escape("] [TotalTime:")),
"DateCreated: yadda yadda ] [TotalTime: meh")
...顺便说一下,注意适当的缩进使可读性容易得多吗? 您可能会考虑将来自己做,或者使用将为您做的编辑器(例如emacs)。
在正则表达式模式下使用时,应转义特殊字符:
1)直接:
Date = re.search(r'%s(.*)%s' % ("DateCreated:", "\] \[TotalTime:"), 'DateCreated: 04-01-2017 ] [TotalTime: 2')
print(Date.group(1)) # 04-01-2017
2)或使用re.escape()
函数(最好):
Date = re.search(r'%s(.*)%s' % (re.escape("DateCreated:"), re.escape("] [TotalTime:")), 'DateCreated: 04-01-2017 ] [TotalTime: 2')
print(Date.group(1)) # 04-01-2017
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.