C# 用于在文本中查找货币值而不是日期的正则表达式

C# 用于在文本中查找货币值而不是日期的正则表达式,c#,regex,C#,Regex,我有如下两个字符串示例 this book was sold for 12.00 on 12.12.2010 he paid 12.12.2010 , and puchased an amount of 15.00 我想从这些行中获取金额,但不是使用正则表达式获取日期。您可以使用 \d+\.\d{2}(?![.\d]) 如果您只需要区分此格式的日期和此格式的货币金额 此正则表达式查找模式数字、点、两个数字,但仅当它后面没有另一个点或另一个数字时(以防止日期匹配) 快速PowerShell测试

我有如下两个字符串示例

this book was sold for 12.00 on 12.12.2010
he paid 12.12.2010 , and puchased an amount of 15.00
我想从这些行中获取金额,但不是使用正则表达式获取日期。

您可以使用

\d+\.\d{2}(?![.\d])
如果您只需要区分此格式的日期和此格式的货币金额

此正则表达式查找模式数字、点、两个数字,但仅当它后面没有另一个点或另一个数字时(以防止日期匹配)

快速PowerShell测试:

dd.mm.yy
的形式更新短日期(以备需要):

(?
试试这个

\b\d+\.\d{2}(?!\.?\d)
看到了吗

\b
是一个字边界,这确保在第一个数字之前有一个非字字符(也包括数字)

\d+\.\d{2}
至少是一个数字,后跟一个点和两个其他数字

(?!\.?\d)
是一种负向前瞻,确保前面没有数字或数字后面没有点。这将允许金额位于句子末尾

工作c#代码:

试试这个:

(?:\s|^)\d+\.\d+(?:\s|$)
在我的测试中,它给出了两个匹配项:

12.00 
15.00

这没有道理。你想得到12.00但不是12.12.2010?和15.00但不是12.12.2010?你可能应该雇佣几个人来处理这些“数据”.句子结构总是一样的吗?对单词进行排序,按空格分割字符串并从已知索引中获取值不是更简单吗?为什么这不适用于.net正则表达式(我知道会的)?我能想象的唯一一件事是您不使用逐字字符串,请尝试以下
@“\b\d+\。\d{2(?}!\?\d)”
我在Expresso中试过,但没有成功,而Joey的成功了。但我只是再次尝试,现在它成功了……不确定我第一次做错了什么
(?:\s|^)\d+\.\d+(?:\s|$)
12.00 
15.00