2016-04-06 4 views
0

это код:регулярное выражение: матч строка с инвертировать шаблон, предшествующих другой узор

(?!cxdef\.)trimheader

я хочу, чтобы соответствовать любому: '=trimheaderspace' or 'old.trimheader' or 'get trimheader()' и т.д ... но НЕ»... = cxdef. trimheaderspace() "

Я не хочу 'cxdef.' превзойти «триммера».

Это выглядит так просто, но код не будет работать. Есть идеи ?

+0

используйте lookbehind, а не lookahead –

ответ

2

Вы должны использовать нулевую ширину отрицательного просмотра назад:

>>> def out_match(st): 
...  return st if re.search(r'(?<!cxdef\.)trimheader', st) else None 
... 
>>> out_match('=trimheaderspace') 
'=trimheaderspace' 
>>> out_match('cxdef.trimheaderspace()') 
>>> 
0

Я нашел ответ на мой вопрос, вот код:

(?<!cxdef\.)trimheader 

я просто добавить < между ними в ? и ! к сделать отрицательный lookbehind. он будет соответствовать любому, кроме «cxdef.trimheader».

+0

Вы проверили уже предоставленный ответ? Это именно то, о чем говорил данный ответ. – heemayl

+0

Спасибо, я получил этот ответ, прежде чем я прочитал ваше сообщение. На самом деле я получил его отсюда: https://www.youtube.com/watch?v=aIEjh0YsxWA. это простой обучающий видеоролик Lookahead. Спасибо – andio

+0

также здесь хороший инструмент для игры, с которым используется в этом видео: http://regexr.com/v1/ http://gskinner.com – andio

Смежные вопросы