簡體   English   中英

正則表達式findall在python3中產生奇怪的結果

[英]Regex findall produces strange results in python3

我想使用python查找字符串的所有文檔塊。 我的第一次嘗試是:

b = re.compile('\/\*(.)*?\*/', re.M|re.S)
match = b.search(string)
print(match.group(0))

這樣就可以了,但是您會注意到:它只會打印出1個文檔塊,而不是全部。

所以我想使用findall函數,該函數表示它將輸出所有匹配項,如下所示:

b = re.compile('\/\*(.)*?\*/', re.M|re.S)
match = b.findall(string)
print(match)

但是我永遠都不會得到有用的東西,只有這些類型的數組:

[' ', ' ', ' ', '\t', ' ', ' ', ' ', ' ', ' ', '\t', ' ', ' ', ' ']

該文檔確實說它將返回空字符串,但是我不知道這怎么用。

您需要在捕獲組中移動量化器:

b = re.compile('\/\*(.*?)\*/', re.M|re.S)

為了擴大羅希特耆那教的(正確)回答了一下,跟你說了括號的限定詞“比賽(非貪婪)任意數量的括號內的一個字符,並捕捉到一個字符”。 換句話說,它將匹配“”或“ aaaaaa”,但在“ abcde”中將僅匹配“ a”。 (並且由於它不是貪婪的,所以即使在“ aaaaaa”中也只能匹配一個“ a”)。 通過將限定符移動到括號內(即,而不是以前的(.*?) ),您現在說的是“匹配任意數量的字符,並捕獲所有字符”。

我希望這可以幫助您了解發生了什么事情。

暫無
暫無

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

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