簡體   English   中英

re.search() 只匹配第一次出現

[英]re.search() only matches the first occurrence

我正在嘗試匹配模式:

<--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 似乎可以正常工作

我究竟做錯了什么?

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM