正则表达式将多次出现与字符串 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】:在正向前瞻中使用捕获,您也需要移除锚点。注意3
和4
之间的-
是多余的。
(?=([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#文本框的文本,正则表达式约束,正整数和小数点后只有一位小数