【问题标题】:Why isn't this regex matching a string with percentage symbol?为什么这个正则表达式不匹配带有百分比符号的字符串?
【发布时间】:2017-01-25 20:30:06
【问题描述】:

我有一个包含以下输入的文件:

xa%1bc
ba%1bc
.
.

等等。我想使用matchregex 来识别其中包含a%1b 的行。 我正在使用

 import re
 p1 = re.compile(r'\ba%1b\b', flags=re.I)
 if re.match(p1,linefromfile):
    continue

它似乎没有检测到带有 %1 的行。问题是什么?谢谢

【问题讨论】:

  • 问题是\b 围绕您的模式。它代表“单词边界”,因此它与您的任何示例都不匹配。此外,您不需要正则表达式来简单地检查子字符串。
  • 有几个问题。首先你应该只是be using in。其次,您正在检查不存在的单词边界。第三,当you need search to look in the whole string 时,您只查看带有match 的字符串的开头。

标签: python regex string match word-boundary


【解决方案1】:

match 只搜索字符串开头的模式,如果要查找字符串是否包含模式,请改用search。除了你不需要单词边界,\b

re.search(pattern, string, flags=0)

扫描字符串寻找 正则表达式模式产生的第一个位置 匹配,并返回一个对应的匹配对象。如果没有则返回无 字符串中的位置与模式匹配;请注意,这是 不同于在某个点找到零长度匹配 字符串。

re.match(pattern, string, flags=0)

如果有零个或多个字符 字符串的开头匹配正则表达式模式,返回一个 对应的匹配对象。如果字符串不匹配,则返回 None 图案;请注意,这与零长度匹配不同。

import re
if re.search(r"a%1b", "xa%1bc"):
    print("hello")
# hello

【讨论】:

    【解决方案2】:

    你可以试试

    if 'a%1b' in linefromfile:
    

    如果你需要正则表达式

    if re.match('a%1b', linefromfile):
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多