TL;博士
搜索:
^.*<?\b([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])\b>?.*$
代替:
\1@\2
解释:
根据这篇文章,RFC 5322规范给出了有效电子邮件地址的官方定义。
他们的字符串,为在 TextWrangler 中使用而简化,将是:
搜索:
([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
代替:
\1@\2
就其本身而言,它将匹配:
蒂米·特纳 < tturner@example.com >
" jamminjeff@example.com " < jamminjeff@example.com >
苏珊·奥尔德 < suesblues@example.com >,
sallyartist@example.com
虽然这确实与您的示例电子邮件字符串相匹配,但它并没有为您提供您想要的确切结果,因为它还包括"jamminjeff@example.com"
,应该被删除。
如果你知道一些事情,你可以在它之前和之后使用一些过滤:
- 可以丢弃电子邮件字符串之前的所有内容吗?
- 可以丢弃电子邮件字符串之后的所有内容吗?
- 是否会找到与需要删除的电子邮件字符串相匹配的任何其他文本?
如果1 和 2 为“是”,3为“否”,则在该字符串前面加上^.*<?\b
,并在后面加上\b>?.*$
。
这从行首开始,搜索 0 个或多个字符、一个可选的左括号,然后是一个开始实际电子邮件地址的单词边界。
然后,在电子邮件地址的最后一个字符上查找单词边界、可选的右括号以及零个或多个字符,直到行尾。
将其替换为\1@\2
将清理整行以仅包含电子邮件地址。