2012-07-04 99 views
0

我有下面的表達式,應該匹配整個給定的單詞不區分大小寫的方式.Quotes是該單詞的一部分,所以我檢查該單詞是前面還是後面有任何引號。例如,單詞「foo」不應與文本「foo's」相匹配。正則表達式邊界+引號

word = "foo" 
pattern = re.compile(r'(?<![a-z\'])%s(?![a-z\'])' % word,flags=re.IGNORECASE) 

唯一的例外是三引號,如果字是內(旁)的三重引號應該匹配:

pattern.search("'''foo bar baz'''") 

「FOO」應該發現了這個時間,但它不會因爲這個詞前面有一個引號。

+0

酷。問題是什麼? –

+0

XD,我的正則表達式應該找到這個詞,如果它在三重引號內,但它不是。 – olanod

回答

0
((?<![a-z\'\"])|(?<=\'{3}))foo((?![a-z\'\"])|(?=\'{3})) 
0

使用正則表達式(?:(?<=''')|(?<!'))\bfoo\b(?:(?=''')|(?!'))

pattern = re.compile(r'(?:(?<=\'\'\')|(?<!\'))\b%s\b(?:(?=\'\'\')|(?!\'))' % word,flags=re.IGNORECASE) 
0

不使用前瞻:

>>> pat = r'([\'\"]{3}|\b)foo\1' 
>>> m = re.search(pat, 'My """foo""" is rich') 
>>> re.search(pat, 'My """foo""" is rich').groups() 
('"""',) 
>>> re.search(pat, "My '''foo''' is rich").groups() 
("'''",) 
>>> re.search(pat, 'My """foo"" is rich').groups() 
('',) 
>>> re.search(pat, 'My """foo\'\'\' is rich').groups() 
('',)