只有在字符串中找到一组数字时,C# 正则表达式才匹配
Posted
技术标签:
【中文标题】只有在字符串中找到一组数字时,C# 正则表达式才匹配【英文标题】:C# Regex match only if one group of numbers is found in string 【发布时间】:2021-12-06 00:38:37 【问题描述】:我正在尝试提出一个正则表达式来处理从字符串中捕获一个数字的一般场景,其中该数字可能具有一个或多个非数字字符前/后固定。 该数字可以包含零个或一个小数点或逗号。 如果字符串包含多个由非数字分隔的连续数字“集合”,我希望正则表达式失败(“集合”可能不是正确的术语)。
例如,以下输入将成功匹配:abc12.00xyz
将匹配 12.000.1$
将有效并匹配 0.1.01
将有效并匹配 0.01123abc
有效且匹配 123abc123
有效且匹配 123
这些输入将无法匹配:abc12.00xyz322
将因第二组数字而失败,在此示例中为 32212t2
由于有两个单独的数字“组”而失败
我尝试了很多排列方式,但进展不大。这是迄今为止我最接近的一次。它正确匹配数字,不包括匹配中的非数字,但它包括字符串中的所有数字“集合”。
([\d]*[.,])?[\d]+
任何建议将不胜感激。
【问题讨论】:
【参考方案1】:您可以使用捕获组:
^[^0-9\r\n]*?([0-9]*\.?[0-9]+)[^0-9\r\n]*$
^
字符串开始
[^0-9\r\n]*
可选匹配除数字或换行符之外的任何字符,尽可能少
([0-9]*\.?[0-9]+)
捕获组1,匹配可选数字、可选逗号和1+数字
[^0-9\r\n]*
可选择匹配除数字或换行符以外的任何字符
$
字符串结束
查看.NET regex demo(单击表格选项卡查看捕获组值)
【讨论】:
以上是关于只有在字符串中找到一组数字时,C# 正则表达式才匹配的主要内容,如果未能解决你的问题,请参考以下文章