1
作爲一個學習練習,我喜歡比較兩個正則表達式做同樣的事情。如何在正則表達式python中捕獲未知長度的模式?
在這種情況下,我想從字符串中提取數字的順序是這樣的:
CC_nums=[
'2341-3421-5632-0981-009',
'521-9085-3948-2543-89-9'
]
而且在正則表達式捕獲後正確的結果將是
['2341', '3421', '5632', '0981', '009']
['4521', '9085', '3948', '2543', '89', '9']
我明白,這作品python
:
for number in CC_nums:
print re.findall('(\d+)',number)
但是,爲了更深入地理解,我試過如下:
for number in CC_nums:
print re.findall('\s*(?:(\d+)\D+)+(\d+)\s*', number)
..這將返回:
[('0981', '009')]
[('89', '9')]
兩個問題:
首先,爲什麼第二個返回一個元組,而不是一個列表? 其次,爲什麼第二個不匹配其他數字組,如2341
,3241
等?
我知道findall
將返回非重疊捕獲組,所以我試圖避免這種情況。捕獲組由於(\d+)
而不重疊,所以我認爲這不是問題。
好的,謝謝你,所以如果我理解正確,這是對你要告訴我什麼的更詳細的解釋? http://www.regular-expressions.info/captureall.html – Candic3
是的,*重複捕獲組將捕獲最後一次迭代,而捕獲另一個重複組的組會捕獲所有迭代。*我嘗試使用更簡單的單詞以更簡潔的方式。你想讓我逐步說明發生的事情嗎? –
一步一步可能會有幫助,但這裏讓我更加困惑:我認爲這樣做不行:'re.findall('(\ d +)+',number)'因爲它重複捕獲組* , 如你所說。但是,出於某種原因,這很好地工作?因爲它*捕獲重複的組*,但爲什麼'(\ d +)+'也可以工作,這是完全有道理的:'re.findall('(超越了我.....? – Candic3