繁体   English   中英

无法匹配以特定字符结尾的模式

[英]Cannot pattern match patterns ending with specific characters

我正在尝试匹配以 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)

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

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

编辑:看起来您只想要以bar结尾的所有内容,而不管行尾如何。 在这种情况下,您可以通过添加?来告诉将星*设置为非贪婪。

>>> re.findall(".*?bar", "danibarsambarbreadbar")
['danibar', 'sambar', 'breadbar']

你可以试试这个

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

或者你可以试试这个:

import re
a ="foo bar baz\nbar foo baz\nbaz foo bar\nbar baz foo\nfoo baz bar\nbaz bar foo"
search = re.findall("(.+bar)\n", a)
print(search)

输出:

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

尝试这个:

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']

暂无
暂无

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

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