2016-04-19 2 views
1

Быстрый вопрос ... Мне нужно регулярное выражение, которое соответствует определенной букве в коде, если оно не содержится в определенном шаблоне.Regex RE: Все, но не этот шаблон

Я хочу, чтобы что-то, что соответствует N, сопровождалось или предшествовало чему-либо, так как ему не предшествовало НЕМЕДЛЕННО с помощью C (= O).

Пример:

C(=O)N 

Если не совпадают

C(=O)CN 

должны соответствовать

Но это не нужно, потому что якорь:

C(=O)NCCCN 

должны соответствовать из-за N в конце

До сих пор у меня есть это:

(?!C\(=O\)N$)[N] 

Любая помощь будет оценена.

ответ

2

Вы можете использовать отрицательный: 'назад

(?<!C\(=O\))N 

См regex demo

N получит соответствует только тогда, когда не предшествуют непосредственно с буквальным C(=O) последовательности.

(?<!...)отрицательный внешний вид. Он не потребляет символы (не перемещает индекс регулярных выражений), а просто проверяет, отсутствует ли что-то из строки до текущей позиции. Если текст сопоставлен, совпадение не выполняется (нет совпадения). См. Lookarounds для более подробной информации.

In Python: r'(?<!C\(=O\))N':

import re 
p = re.compile(r'(?<!C\(=O\))N') 
strs = ["C(=O)N", "C(=O)CN", "C(=O)NCCCN"] 
print([x for x in strs if p.search(x)]) 
+0

Спасибо. Можете ли вы объяснить мне <символ? – ben

+1

'(?

+0

Спасибо. Большая помощь! – ben

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