gpt4 book ai didi

regex - 是否可以为逗号分隔列表创建正则表达式模式而无需为单个项目重复模式?

转载 作者:行者123 更新时间:2023-12-02 00:24:04 25 4
gpt4 key购买 nike

我是正则表达式的新手:)

我需要匹配单个电子邮件或以逗号分隔的电子邮件数量的正则表达式。

为了匹配单个电子邮件,我写了 \b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z] {2,4}\b。我们称它为 pattern1

为了匹配电子邮件列表,我写了这样的东西

"("+ pattern1 + ")([,]\\s*"+ pattern1 + ")*"

但是因为我不能在 Java 注释中使用变量,所以我必须这样写

(\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b)([,]\\s*\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{ 2,4}\b)*

看起来很可怕。

是否可以重写我的正则表达式,这样我就不需要为单个电子邮件复制粘贴模式?

谢谢。

最佳答案

您可以缩短它并提高可读性,方法是使用 \w 表示“字母+下划线+数字”,使用 \d 表示数字,并打开不区分大小写的匹配所以你可以只使用 a-z 作为字母:

(\b[\w.%-]+@[a-z\d.-]+\.[a-z]{2,4}\b)([,]\\s*\b[\w.%-]+@[a-z\d.-]+\.[a-z]{2,4}\b)*

你也可以用这个进一步缩短它(逗号和空格是可选的):

((,\\s*)?\b[\w.%-]+@[a-z\d.-]+\.[a-z]{2,4}\b)+

一些演示代码(也使用正则表达式捕获组):

    //c#    
string input = @"sdf.an@dfgdfg.com, sdfsdf@fdfd.erff";
var matches = Regex.Matches(input, @"((?:,\s*)?(\b[\w.%-]+@[a-z\d.-]+\.[a-z]{2,4}\b))");
string result = "matches:\n";
for (int i = 0; i < matches.Count; i++)
{
result += "match " + i + ",value:" + matches[i].Groups[2].Value + "\n";
}
Console.WriteLine(result);

关于regex - 是否可以为逗号分隔列表创建正则表达式模式而无需为单个项目重复模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com