【问题标题】:Python regular expression newline escape characterPython 正则表达式换行符转义符
【发布时间】:2016-12-21 11:01:47
【问题描述】:

我对 Python 的正则表达式有点困惑。具体来说,为什么以下行不返回True

代码:bool(re.search(r'ab\n^c$', 'ab\nc'))

【问题讨论】:

  • ^$ 在正则表达式中有特殊含义。我建议你对正则表达式做一些研究。

标签: python regex


【解决方案1】:

$ 匹配字符串的结尾,所以c 必须在结尾。但是,您匹配的字符串以 c$ 结尾。接下来,您还包括了^,它与字符串的start 匹配,但您将它放在表达式的中间。

要么转义^$,使其匹配文字,要么使^ 匹配文本中每一行 的开头与re.MULTILINE flag , 并从要匹配的文本中删除 ^$

演示:

>>> import re
>>> bool(re.search(r'ab\n\^c\$', 'ab\n^c$'))  # escaped
True
>>> # multiline and target text adjusted
...
>>> bool(re.search(r'ab\n^c$', 'ab\nc', flags=re.MULTILINE)) 
True

【讨论】:

  • 谢谢。但是我也尝试了这一行:bool(re.search(r'ab\n^c$', 'ab\nc')),结果仍然是 False.. 为什么会这样?我的意思是,字符串中的第二行只是一个'c',应该匹配,对吧?
  • 我已经在我的回答中解决了这个问题。 ^ 匹配 绝对开头,而不是每一行的开头,除非您使用 re.MULTILINE 标志专门切换行为。
  • 哦,我明白了。感谢您的帮助!
  • ^\n 之后是多余的,因为在\n 之后有文本。 r'(?m)ab\n^c$' = r'(?m)ab\nc$'
猜你喜欢
  • 2012-04-08
  • 2010-12-22
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多