0

我想拆分一个以逗号分隔的电子邮件地址列表,并且我想在这些电子邮件地址中获取用户友好的名称(如果有的话)。

现在我使用这个正则表达式:

(?<value>(?<normalized>.*?)\[.*?\])\s*,*\s*

此 reg exp 适用于输入字符串

"Eline[Elinek@yahoo.com],raymond[raymondc@yahoo.com]" 

它返回两对:

  1. 值 'Eline[Elinek@yahoo.com]' 归一化 'Eline'
  2. 值 'raymond[raymondc@yahoo.com]' 归一化 'raymond'

但它不适用于输入字符串

"Eline[Elinek@yahoo.com],piet@yahoo.com,raymond[raymondc@yahoo.com]" 

在第二种情况下,它应该返回 3 个归一化为空的电子邮件地址。

4

2 回答 2

1

为什么您的第二个示例应返回 3 个匹配项?第二封电子邮件没有您在模式中需要的 [...],因此该地址还与(?<normalized>.*?)第三个电子邮件地址相匹配。

在这里试试这个:

(?<value>(?<normalized>[^,]*?)\[.*?\]|[^,\[\]]*)\s*,?\s*

在 Regexr 上查看

但这变得难以理解,为什么不先用逗号分割然后在结果数组上工作呢?

于 2013-02-08T11:23:02.830 回答
0

你可以试试这个模式:

(?<value>(?<normalized>[^\[,]*?)\[?[^,]*\]?)

您的模式似乎不打算匹配整个输入字符串,并且您打算遍历不同的匹配项,因此最后不需要添加逗号模式。

规范化组匹配字符,而它们不是[,。value 的组使[, 和]可选的,并且匹配中间的任何字符,而它们不是逗号。

于 2013-02-08T11:48:17.977 回答