正则表达式在分号后插入新行字符并在电子邮件之前删除名称

时间:2015-07-08 08:54:37

标签: regex vba excel-vba excel

我在一行中有一个我希望清理的电子邮件列表。它们目前采用以下格式:

Jones, Peter <jones.h7@petstore.com>; Bradley, Charles <bradley19@petstore.com>; Frank, Hilda <frank.hl@petstore.com>;

,所需结果如下:

jones.h7@petstore.com;
bradley19@petstore.com; 
frank.hl@petstore.com;

因此,电子邮件周围的名称和尖括号将被删除。

我想要一个正则表达式解决方案。我已尝试将;\s替换为\r\n但未获得预期结果。我是正则表达式的新手,所以我被卡住了。

3 个答案:

答案 0 :(得分:1)

<([^>]*)>(;)|[^><]*

你可以试试这个。$1$2\n。稍后删除空的换行符。参见演示。

https://regex101.com/r/cK4iV0/27

答案 1 :(得分:1)

您可以将邮件与以下正则表达式之一匹配(如果您真的坚持使用正则表达式解决方案),而不是替换除<...>个电子邮件之外的所有内容:

<([^@<>]+@[^@<>]+)>;

电子邮件地址将位于已捕获的组1中。请参阅demo

如果您需要更换不需要的字符串,您仍可以使用

<([^@<>]+@[^@<>]+)>(;)|[^<>]+|<|>

使用$1$2替换字符串。见demo

答案 2 :(得分:1)

你也可以试试这个正则表达式:

(?:[^<]+)<([^>]+)>(;)

并将其替换为$1$2\n

此处,第一组捕获电子邮件地址,第二组捕获;。此处?:会忽略电子邮件地址前的名称。

Live Demo