簡體   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