re.search()只匹配第一个匹配项

我正在尝试匹配模式:

<--Header Title-->

some body text

以下仅匹配第一次出现的情况:

string1 = """<-- Option 1 -->

Nice text

<--Final stuff-->

Listing all

of

the

text

"""

regex = re.compile(r"<--([\w\s]+)-->([\s\S]*?)(?=\n<--|$)")

m = regex.search(string1)

print m.groups()

结果是:

(' Option 1 ', '\nNice text')

回答:

Final%20stuff–%3E%0AListing%20all%0Aof%0Athe%0Atext&ignorecase=0&multiline=0&dotall=0&verbose=0)。

我究竟做错了什么?

回答:

重新搜索仅匹配字符串中的第一个匹配项。您需要finditer还是findall。

扫描字符串以查找正则表达式模式产生匹配项的

,然后返回相应的MatchObject实例。如果字符串中没有位置与模式匹配,则返回None;否则,返回None。请注意,这与在字符串中的某个点找到零长度匹配不同。

Finditer返回目标字符串中所有位置的匹配对象,从而产生一个迭代器,而findall返回所有匹配项的子字符串。

>>> import re

>>> re.findall('a', 'ababababa')

['a', 'a', 'a', 'a', 'a']

>>> x = list(re.finditer('a', 'ababababa'))

>>> x

[<_sre.SRE_Match object; span=(0, 1), match='a'>,

<_sre.SRE_Match object; span=(2, 3), match='a'>,

<_sre.SRE_Match object; span=(4, 5), match='a'>,

<_sre.SRE_Match object; span=(6, 7), match='a'>,

<_sre.SRE_Match object; span=(8, 9), match='a'>]

>>> x[0].group()

'a'

以上是 re.search()只匹配第一个匹配项 的全部内容, 来源链接: utcz.com/qa/402480.html

回到顶部