2013-12-18 4 views
0

Я пытаюсь использовать регулярное выражение для соответствия определенному символу только в том случае, если он не сразу примыкает к определенному символу. (Для книги в калибре)Шаблон регулярного выражения для совпадения символов, не окруженных особыми символами

В частности, я хочу, чтобы все не были в конце предложения, а это значит, что они будут находиться между обычными символами, а не угловыми скобками или пробелами. Я думал, что ”[^<] будет работать, но это выбирает как метку кавычки, так и следующий символ, а не только сам символ. Я также не уверен, как сделать ИЛИ, чтобы проверить пространство. Я предполагаю, что это будет что-то вроде ”[^<]|[^ ], но это тоже не так.

Вот пример того, что я хотел бы, чтобы соответствовать:

Кроме угловой скобки: <p class="calibre1">“I”m tired!”</p>

Помимо пространства: <p class="calibre1">“I”m tired!” he said</p>

только должен быть выбран кавычка в I”m (и только сама кавычка)

Прошу прощения, если для этого есть очевидный ответ, но я читал над регулярным выражением Python do и я не могу понять это. :(

ответ

4

Вы можете возможно использовать отрицательный предпросмотр (?! ...) так:.

”(?!<) 

Это будет соответствовать , если оно не сопровождается <

Чтобы добавить пространство ...

”(?![< ]) 

Этот номер будет соответствовать , за исключением следующих: < или пробел

1

с помощью negative-lookahead:

regex = r '"(?!<|\s)' 

| средства "или"
\s означает пробельные

Вам не нужно захватить, так как вы знаете, вы только сопрягать ".

В качестве альтернативы вы можете использовать класс символов вместо или, то есть: [<\s].

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