2017-09-08 41 views
2

我盡力配合的話只有這個詞來比較和字符串在單引號是這樣的:Python的正則表達式匹配報價

foo foo #match 
'foo' foo #don't match 
foo 'foo' #don't match 
'foo' 'foo' #match 
foo 'foo #match 
foo foo' #match 

我想這正則表達式:

((?<!')|((\')?))foo((?!')|(\W*))(?=\W\s*|$) 

但輸出是:

foo foo #match it's good 
'foo' foo #don't match it's good 
foo 'foo' #match it's not good 
foo 'foo #match it's good 
foo foo' #match it's good 
'foo' 'foo' #match it's good 

另外,如果我以一個字母嘗試所有這封信匹配的我不想要的話,但如果我添加\b所有的正則表達式不工作...

+1

所以,如果我理解正確的話,你想匹配,如果第一個和第二個字是相同的,只有當兩個或者是(1)用雙引號(包圍2)不包括引號,(3)報價不完整?還有關於「foo foo」和「foo'foo」? – ctwheels

回答

0

根據你的問題,你提出的匹配(不多不少)下面的正則表達式將起作用。

注:我也是在正則表達式中加入雙引號(單引號的頂部)。您可以刪除他們,如果你不想匹配的雙引號"

(?:^(['"])(\w+)\1\s+\1\2\1$)|(?:^(\w+)\s+\3$)|(?:^(\w+)\s+(?:['"]\4$|\4['"]$)) 

要看到這個表達式中使用點擊this鏈接


這也適用,它是略短。

(?:^(['"]{0,1})(\w+)\1\s+(?:(?:(['"]{0,1})\2\1)|(?:\1\2(['"]{0,1})))$) 

要看到這個表達式中使用點擊this鏈接

+0

謝謝,這就是我想要的,但如何添加特定的詞用的findall或匹配或SEACH?如果他們是:「富」和「酒吧」,我只想匹配「吧」?再次感謝。 – Sabba

+0

我個人會在正則表達式之外進行檢查。在你的代碼中執行它。這是第二個捕獲組 – ctwheels