2012-03-25 3 views
4

Есть ли возможность сделать запрос на просмотр не захватывающим? Такие вещи, как bar(?:!foo) и bar(?!:foo) не работают (Python).Регулярное выражение не захватывает lookahead утверждение

+5

Lookaheads * * не захватываются. Возможно, вы ищете * негативный * lookahead? Это просто '(?! Foo)'. [Ссылка] (http://www.regular-expressions.info/lookaround.html) –

ответ

2

Если вы делаете bar(?=ber) на «парикмахерской», «бар» соответствует, но «бер» не фиксируется.

1

Вы не ответили на вопрос Алана, но я буду считать, что он прав, и вас интересует отрицательное утверждение. IOW - соответствует «bar», но не «barfoo». В этом случае вы можете создать свое регулярное выражение следующим образом:

myregex = re.compile('bar(?!foo)') 

for example, from the python console: 

>>> import re 
>>> myregex = re.compile('bar(?!foo)') 
>>> m = myregex.search('barfoo') 
>>> print m.group(0)    <=== Error here because match failed 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute 'group' 
>>> m = myregex.search('bar')  
>>> print m.group(0)    <==== SUCCESS! 
bar