re.search()仅匹配第一次出现

时间:2016-05-08 01:05:32

标签: python regex python-2.7

我正在尝试匹配模式:

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

我做错了什么?

1 个答案:

答案 0 :(得分:4)

Re.search仅匹配字符串中的第一个匹配项。您需要finditerfindall

  

<强> re.search

     

扫描字符串,查找正常表达式模式生成匹配项的第一个位置,并返回相应的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'