繁体   English   中英

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

[英]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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM