Совпадение адресов электронной почты, не содержащихся в теге HTML - PullRequest
1 голос
/ 29 апреля 2010

Мне нужно выделять адреса электронной почты в тексте, но не выделять их, если они содержатся в тегах HTML, содержимом или атрибутах.

Например, строка example@example.com должна быть преобразована в <a href="mailto:example@example.com">example@example.com</a>

Но адреса электронной почты в строке <a href="mailto:example@example.com">example@example.com</a> не должны обрабатываться.

Я пробовал что-то вроде этого регулярного выражения:

(?<![":])[a-zA-Z0-9._%-+]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}(?!")

но это не работает должным образом.

1 Ответ

1 голос
/ 29 апреля 2010

Я предполагаю, что ваш исходный текст - это HTML-файл, в котором отсутствуют теги привязки только для некоторых содержащихся адресов электронной почты. Если это так, то вы не сможете использовать регулярные выражения для надежного сопоставления только непомеченных адресов электронной почты. Например, с учетом ввода:

...
<P>You'll find a lot more written by <A 
href="mailto:SvartaIF@example.com"
title="some text including an@sign.org">

SvartaIF@example.com
</A>.
</P>
...

становится невозможным лексически связать href с адресом, а также исключить an@sign.org. Вам нужно использовать анализатор HTML; BeautifulSoup довольно популярен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...