2016-03-22 269 views
2

我在查詢Python中的部分正則表達式匹配。部分正則表達式匹配

例如:

如果你有一個字符串:

string = 'foo bar cat dog elephant barn yarn p n a' 

而且正則表達式:

pattern = r'foo bar cat barn yard p n a f' 

以下將是真實的:

  • re.match(pattern, string)會返回None
  • re.search(pattern, string)也將返回None

雖然我們都可以看到,該模式的第一部分字符串的第一部分相匹配。

因此,而不是搜索字符串中的模式的整體,有沒有辦法查看字符串匹配模式的百分比?

+0

模式必須匹配** **完全。如果你想要它的一部分是可選的,使用'?'。看看python文檔(https://docs.python.org/3.5/library/re.html)或howto(https://docs.python.org/3.5/howto/regex.html)。例如'pattern = r'foo bar cat(barn yard p n a f)?'' –

+0

我知道:)。問題是要求**而不是完全搜索,還有另一種方法可以返回一個百分比而不是匹配。 – Signal

+0

您最終可以查看提供模糊匹配功能的正則表達式模塊:https://pypi.python.org/pypi/regex。 –

回答

2

不適用於正則表達式。

from difflib import SequenceMatcher 
SequenceMatcher(None, string, pattern).ratio() 
# => 0.7536231884057971 

你甚至可以匹配的話,而不是字符:

SequenceMatcher(None, string.split(), pattern.split()).ratio() 
# => 0.7368421052631579 
+0

謝謝你,這正是*我正在尋找的東西! – Signal

0

對於我所知道的任何正則表達式庫,這是不可能的,但是如果您有權訪問狀態機並逐個遍歷一個字符,那麼這是可能的。

編譯正則表達式到狀態機有點棘手,但是運行狀態機並不重要,所以你可以做任何你想要的步驟。作爲一個例子,mine is here

這可以告訴你它從多少個字符切換到「可能匹配取決於未來的輸入」到「不匹配由於衝突」,但不是直接的百分比(儘管我不認爲這真的是你想要的)。