带有可选组的正则表达式

时间:2013-02-08 11:03:23

标签: regex

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

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

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

此reg exp适用于输入字符串

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

返回两对:

  1. value'Eline [Elinek@yahoo.com]'规范化'Eline'
  2. value'raymond [raymondc@yahoo.com]'normalized'raymond'
  3. 但它不适用于输入字符串

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

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

2 个答案:

答案 0 :(得分:1)

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

请尝试此处:

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

here on Regexr

但是这一点变得难以辨认,为什么不首先用逗号分割然后在结果数组上工作呢?

答案 1 :(得分:0)

你可以尝试这种模式:

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

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

规范化群组匹配字符,但不是[,。值组[]可选,并匹配其中任何字符,而不是逗号。