正则表达式将多次出现与字符串 C# 中的数字匹配

Posted

技术标签:

【中文标题】正则表达式将多次出现与字符串 C# 中的数字匹配【英文标题】:Regex Match multiple occurences with numbers in string C# 【发布时间】:2017-02-21 01:13:32 【问题描述】:

我一直在寻找我的问题答案,但找不到所以我写在这里。

我想以字符串为例:= "37513220102304920105590"

并找到长度为 11 且以 3 或 4 开头的数字的所有匹配项。

我一直在尝试这样做:

string input = "37513220102304920105590"
var regex = new Regex("^[3-4][0-9]10$");
var matches = regex.Matches(trxPurpose);

// I expect it to have 3 occurances "37513220102", "32201023049" and "30492010559"
// But my matches are empty. 
foreach (Match match in matches)

    var number = match.Value;

    // do stuff

我的问题是:是我的正则表达式不好还是我做错了数学?

【问题讨论】:

【参考方案1】:

在正向前瞻中使用捕获,您也需要移除锚点。注意34 之间的- 是多余的。

(?=([34][0-9]10))

请参阅regex demo。

在C#中,由于值被捕获,你需要收集.Groups[1].Value的内容,见C# code:

var s = "37513220102304920105590";
var result = Regex.Matches(s, @"(?=([34][0-9]10))")
        .Cast<Match>()
        .Select(m => m.Groups[1].Value)
        .ToList();

【讨论】:

如果你想让你的正则表达式更短,你可以写[34]\d;)我不知道?=,不错。 是的,[3-4] = [34]。这更像是对OP的说明。至于\d,我只会添加RegexOptions.ECMAScript 标志,因为\d 匹配的不仅仅是ASCII 数字。见\d is less efficient than [0-9] 还有\d10 而不是[0-9]10,那么我认为你不能让它更短 正则表达式中的“更短”并不意味着“更好”。当“缩短正则表达式”时,应该知道自己在做什么。 我同意。简而言之,它不仅与正则表达式有关,而且与代码相同(不仅如此)。 \d 有什么不好的地方吗?

以上是关于正则表达式将多次出现与字符串 C# 中的数字匹配的主要内容,如果未能解决你的问题,请参考以下文章

C#文本框的文本,正则表达式约束,正整数和小数点后只有一位小数

通过完善邮箱匹配来一步步学习正则表达

正则表达式匹配

通过正则表达式模式匹配使用 stringbuilder 替换多次出现的字符串

C#正则表达式

正则表达式