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

发布于 2021-01-29 18:33:12

我正在尝试匹配模式:

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

但是,[使用pythex似乎可以正常工作](http://pythex.org/?regex=%3C–(%5B%5Cw%5Cs%5D%2B)–%3E(%5B%5Cs%5CS%5D*%3F)(%3F%3D%5Cn%3C–%7C%24)&test_string=%3C–%20Option%201%20–%3E%0ANice%20text%0A%0A%3C

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

我究竟做错了什么?

关注者
0
被浏览
253
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    重新搜索仅匹配字符串中的第一个匹配项。您需要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'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看