只有在字符串中找到一组数字时,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# 正则表达式才匹配的主要内容,如果未能解决你的问题,请参考以下文章

C#在文本中查找字符串

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

正则表达式仅数字和字符

c# 正则表达式提取()中的值

反转一组相当复杂的正则表达式

C#:正则表达式不匹配一组单词