我想拆分逗号分隔的电子邮件地址列表 AND 我想在这些电子邮件地址中获取用户友好名称(如果有的话)。
现在我使用这个正则表达式:
(?<value>(?<normalized>.*?)\[.*?\])\s*,*\s*
此reg exp适用于输入字符串
"Eline[Elinek@yahoo.com],raymond[raymondc@yahoo.com]"
返回两对:
但它不适用于输入字符串
"Eline[Elinek@yahoo.com],piet@yahoo.com,raymond[raymondc@yahoo.com]"
在第二种情况下,它应返回3个标准化为空的电子邮件地址。
答案 0 :(得分:1)
为什么你的第二个例子会返回3个匹配?第二封电子邮件没有[...],您需要在您的模式中使用,因此该地址还会与第三个电子邮件地址的(?<normalized>.*?)
匹配。
请尝试此处:
(?<value>(?<normalized>[^,]*?)\[.*?\]|[^,\[\]]*)\s*,?\s*
但是这一点变得难以辨认,为什么不首先用逗号分割然后在结果数组上工作呢?
答案 1 :(得分:0)
你可以尝试这种模式:
(?<value>(?<normalized>[^\[,]*?)\[?[^,]*\]?)
您的模式似乎不是要匹配整个输入字符串,并且您打算迭代不同的匹配,因此最后不需要为逗号添加模式。
规范化群组匹配字符,但不是[
或,
。值组[
和]
可选,并匹配其中任何字符,而不是逗号。