2012-07-04 3 views
0

У меня есть следующее выражение, которое должно соответствовать всему данному слову в случае нечувствительного метода. Кварталы являются частью слова, поэтому я проверяю, предшествует ли слово или следует какая-либо цитата. Например, слово «foo» не должно соответствовать тексту «foo's».границы слова regex + цитаты

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

Использование регулярных выражений (?:(?<=''')|(?<!'))\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() 
('',) 
Смежные вопросы