views:

40

answers:

1

I need to highlight an email addresses in text but not highlight them if contained in HTML tags, content, or attributes.

For example, the string [email protected] must be converted to <a href="mailto:[email protected]">[email protected]</a>

But email addresses in the string <a href="mailto:[email protected]">[email protected]</a> must not be processed.

I've tried something like this regexp:

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

but it doesn't work properly.

+1  A: 

I'll guessing that your source text is an HTML file which is missing anchor tags for only some of the contained e-mail addresses. If this is true, then you will not be able to use a regexp to reliably match only untagged e-mail addresses. For example, given the input:

...
<P>You'll find a lot more written by <A 
href="mailto:[email protected]"
title="some text including [email protected]">

[email protected]
</A>.
</P>
...

it becomes impossible to lexically associate the href with the address and also exclude [email protected]. You need to use an HTML parser; BeautifulSoup is pretty popular.

msw