我正在學習正則表達式,我想檢查python正在使用的機制。Python 2.6正則表達式機制?
我的正則表達式:
s = re.findall(ur"\d+\.?\d+", "123,45.567 78").
首先,我認爲結果將是隻有45.567
當我運行它,我得到了所有的數字,包括小數點([「123」 ,「45.567」,「78」]),但是使用的過程並不十分清楚。
這是我的理解: Python的第一次啓動時用表達式\ d +,將發現123是確定的(貪婪搜索儘可能逗號之前)。接下來,它期望一個可選的點(。?)不在那裏,並且沒關係。接下來,它需要一個或多個數字。但下一個字符是一個不被接受的逗號(,)。 Python將回到12(下降3)。 12滿滿第一個\ d +。接下來,它期望一個不存在的可選點,接下來它需要一個或多個數字,3個與其匹配。也就是說,123個fullfils是整個正則表達式。
Python會記住123的偏移量2,並在123之後重新開始。也就是說,Python會開始在字符串45.567,78處使用整個正則表達式。
也就是說,整個正則表達式用於三倍。第一次發現123 找到45.567和第三次它會找到78
請多關注問題的格式。大塊文字難以閱讀。並使用代碼格式。 – Mat
運行's = re.findall(ur「\ d + \。?\ d +」,「123,45.567 78」,re.DEBUG)應該可以幫助您瞭解Python的行爲。 – robert
您對第一個「123」匹配的描述是正確的。匹配後,正則表達式引擎會嘗試匹配緊接在第一個匹配之後的位置(逗號前的位置),並且這會失敗。但是引擎不會放棄 - 它會在字符串中的下一個字符上「碰撞」_並且能夠匹配「45.567」。然後在空間之前再次失敗並碰撞,然後找到第三個匹配。正則表達式引擎會在字符串中的每個位置檢查匹配,即使在字符串中最後一個字符後面的位置也會碰撞。 – ridgerunner