使用Python正则表达式搜索包含文字括号的字符串

时间:2017-01-04 21:41:05

标签: python regex

Date = re.search('%s(.*)%s' % ("DateCreated:", "] [TotalTime:"), find_all(Text("Exam"))[0].value).group(1)

我收到错误“正则表达式的意外结束”。我的猜测是它不接受“] [”代码中的部分。

2 个答案:

答案 0 :(得分:2)

使用()转义字符串,使其可以用作正则表达式中的文字。

观察:

内容已转义

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

...顺便说一句,请注意适当的缩进更容易实现可读性?您可能会考虑将来自己这样做,或者使用可以为您完成此操作的编辑器(例如emacs)。

答案 1 :(得分:0)

在正则表达式模式中使用时,应转义特殊字符:

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

https://docs.python.org/3/library/re.html#re.escape