python 正則表示式 groups和group有什麼區別
阿新 • • 發佈:2019-02-11
p = re.compile(r'[ ]+(\w+)+[ ]+\1') 單個字元不需要[],可以簡化為 p = re.compile(r' +(\w+)+ +\1') (\w+)+這種寫法效率很低,而且容易引起誤會。表面上它匹配的是任意多個word(1個或更多),其實整體匹配的內容和一個word沒區別,只是括號匹配的部分變得不清楚。 整體匹配上:(\w+)+ == \w+ 括號匹配多少視engine而定,一般的語言實現應該都是(\w+)+ == (\w+) 如果要返回緊挨著的(空格分開)重複字串,我會這麼做: #!/usr/bin/env python # coding=utf-8 import itertools long_text = 'Paris in the the spring spring ' words = long_text.split() repeats = [x for x, y in itertools.izip(words, itertools.islice(words, 1, None)) if x == y] ========================================== p = re.compile(r'[ ]+(\w+)+[ ]+') 等價於 p = re.compile(r' +(\w+) +') 這個匹配:N個空格,1個word,N個空格(N>=1)。 print p.search('Paris in the the spring spring ').group() 整個字串裡面,第一個能匹配到的是" in ",最後一個能匹配到的是" spring "。python的re module是找到一個匹配就停下來返回結果了,所以(\w+)就捕獲到了"in",你也可以輸出group(0),應該是匹配" in "。 其實別的語言的正則表示式引擎可以返回不同的結果。不見得一定返回第一個匹配項。 ========================================== 正則表示式只是一個工具,而且不復雜。學習的時候可以從簡單開始,不要人為把它複雜化。 儘量從實際需求出發設計正則表示式,不要為了使用表示式的某些功能設計表示式。 ========================================== 如果要用正則表示式找重複單詞,可以這麼做: import re for mo in re.finditer(r'(\w+) +\1', long_text): print mo.group(0)