2010-10-19 3 views
2

Я хочу сопоставить определенные символы только тогда, когда они не имеют префикса определенных символов. Например, совпадение «))))))))))« когда ему не предшествует «x». Нужны некоторые советы. Мой текущий вычет составляетpython regex question

(?<!x|X|:|=|\\1)([\|()\[\]])+ 

который не работает.

[EDIT] Rephrase мой вопрос

+1

Что именно вы хотите выполнить? – BoltClock

+0

@BoltClock, я хочу совместить элементы в захваченной группе типа '))))))))' in 's)))))))', когда они не имеют префикса персонажей в группе lookbehind/ – goh

+3

Python не поддерживает прямые ссылки. – SilentGhost

ответ

1
re.search(r"(?<![x)])\)+", text) 

>>> re.search(r"(?<![x)])\)+", " hello)))))") 
<_sre.SRE_Match object at 0xb75c0c98> 
>>> _.group() 
')))))' 
>>> re.search(r"(?<![x)])\)+", " hellox)))))") 
>>> 

Это делает использование «negative lookbehind assertion»: мы хотим, как многие круглые скобки, как это возможно, не предшествуют ни «х» или «)» (последний, так как в противном случае, мы получим круглые скобки, начиная со второго скобки, предшествующие первой скобке и, следовательно, не «х»)

1

Используйте класс дополняющий характер: '[^x\)](\)+)'
Все ваши конкретные символы, которые не должны быть префиксом будут размещены с x, наряду с ).