【问题标题】:Cannot pattern match patterns ending with specific characters无法匹配以特定字符结尾的模式
【发布时间】:2022-07-21 23:27:25
【问题描述】:

我正在尝试匹配所有以 bar 结尾的模式。 这是我的正则表达式模式".*bar$"。 我没有得到任何结果......如果我在模式的开头使用胡萝卜匹配也会发生同样的事情。

string = """
foo bar baz
bar foo baz
baz foo bar
bar baz foo
foo baz bar
baz bar foo
"""

search = re.findall(".*bar$", string)

for i in search:
    print(i)

【问题讨论】:

  • "$" 表示它只匹配字符串的结尾,字符串不以“bar”结尾,所以这是预期的结果
  • 哦。你会用什么来找到以 bar 结尾的 3 个模式中的每一个?
  • 我只看到 2 行以 bar 结尾
  • 对不起。匹配以 bar 结尾的两个模式。
  • 试试search = re.findall(".*bar\n", string)

标签: python regex matching python-re


【解决方案1】:

如果您设置了re.MULTILINE 标志,您的模式就可以工作。这样,您的模式将逐行匹配,因此 $ 匹配行尾以及整个字符串的结尾。

# Result: ['baz foo bar', 'foo baz bar']
search = re.findall(".*bar$", string, flags=re.MULTILINE)

【讨论】:

    【解决方案2】:

    你可以试试这个

    import re
    a ="foo bar baz\nbar foo baz\nbaz foo bar\nbar baz foo\nfoo baz bar\nbaz bar foo"
    search = re.finditer(".*bar\n", a)
    for i in search:
        print(i.group())
    

    输出:

    baz foo bar
    
    foo baz bar
    

    【讨论】:

      【解决方案3】:

      试试这个:

      string = """
      foo bar baz
      bar foo baz
      baz foo bar
      bar baz foo
      foo baz bar
      baz bar foo
      """
      re.findall(r"(.+bar)\n", string)
      

      输出:

      ['baz foo bar', 'foo baz bar']
      

      【讨论】:

        猜你喜欢
        • 2022-11-22
        • 1970-01-01
        • 2023-01-02
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        相关资源
        最近更新 更多