【问题标题】:re.search() only matches the first occurrencere.search() 只匹配第一次出现
【发布时间】:2016-05-08 01:05:31
【问题描述】:

我正在尝试匹配模式:

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

但是,it seems to work fine using pythex.

我做错了什么?

【问题讨论】:

  • 您是否为search 阅读了the documentation,并且您是否正在寻找替代功能来代替?

标签: python regex


【解决方案1】:

Re.search 只匹配字符串中的第一个匹配项。你想要finditerfindall

重新搜索

扫描字符串以查找正则表达式模式产生匹配的第一个位置,并返回相应的 MatchObject 实例。如果字符串中没有位置与模式匹配,则返回 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多