正则表达式用于查找货币值但不包括文本中的日期

我有类似以下两个示例字符串的文本

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) 

在Regexr上看到它

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

\d+\.\d{2}至少有一位数字,后跟一个点和另外两位数字。

(?!\.?\d)是一个负面的向前看,确保没有数字或没有点后跟一个数字。 这将允许金额在句子的末尾。

使用c#代码:

 String s = "this book was sold for 12.00 on 12.12.2010"; Regex r = new Regex(@"\b\d+\.\d{2}(?!\.?\d)"); Console.WriteLine(r.Matches(s)[0]); Console.ReadLine(); 

试试这个:

 (?:\s|^)\d+\.\d+(?:\s|$) 

它在我的测试中给出两个匹配:

 12.00 15.00