C# 建议使用所需的正则表达式模式

C# 建议使用所需的正则表达式模式,c#,regex,C#,Regex,样本 EL:123 가나123.456다라 123-ABC-456 123.456+678.890 AA03-BB1 $.AB12,00 我想从字符串中提取任意数字格式 数字可能为| 100000 | 20000.00 | 12.52 | 10800.082| 我的模式是 @"\d[\d|,|.]+" 但是。。它不适用于一位数字| 3 | 1 | 我也试过了 @"[\d|,|.]+" 它不应该抓住|,|只是 我应该如何处理我的正则表达式模式?A\d[\d |,|]+re

样本

EL:123  
가나123.456다라  
123-ABC-456  
123.456+678.890  
AA03-BB1  
$.AB12,00
我想从字符串中提取任意数字格式

数字可能为| 100000 | 20000.00 | 12.52 | 10800.082|

我的模式是

@"\d[\d|,|.]+"
但是。。它不适用于一位数字| 3 | 1 |

我也试过了

@"[\d|,|.]+"
它不应该抓住|,|只是


我应该如何处理我的正则表达式模式?

A
\d[\d |,|]+
regex将找不到
3
1
,因为
\d
需要1个数字,而
+
[\d |,.]+
也至少需要一个字符。注意,这也与
1 |
匹配,因为管道符号在字符类中被视为文字字符。要匹配0个或多个匹配项,请使用
*
量词

要匹配所有这些数字,您可以使用

 \d[\d,.]*
或者更好:

\d+(?:[,.]\d+)*

详细信息

  • \d+
    -一个或多个数字
  • (?:[,.]\d+*
    -零或更多(由于
    *
    量词)出现:
    • [,.]
      -逗号或点
    • \d+
      -一个或多个数字

+
替换为
*
并移除
|
。您可以尝试
\d[\d,.]*
。或者
\d+(?:[,.]\d+*
这总是让我感到困惑:d而不是[\d;,。]使用(\d;,)。使用\d+加号表示“至少一个或多个”你们真是太好了!我修好了它,它成功了。还有比MSDN页面更好的学习正则表达式的资源吗?谢谢!有没有比MSDN页面更好的资源来学习正则表达式呢?我可以建议大家在、通读(还有许多其他链接到伟大的在线资源)和所谓的社区中学习正则表达式。还有,值得一看。对于测试.NET正则表达式模式,我可以推荐。