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

时间:2011-12-08 11:13:12

标签: 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

从这些行我想要使用正则表达式来捕获数量,而不是日期。

3 个答案:

答案 0 :(得分:3)

您可以使用

\d+\.\d{2}(?![.\d])

如果你只需要区分完全这种格式的日期和完全这种格式的货币金额。

此正则表达式查找模式数字,点,两位数,但前提是后跟另一个点或其他数字(以防止日期匹配) )。

快速PowerShell测试:

enter image description here

dd.mm.yy格式更新短日期(以防您需要):

(?<![.\d])\d+\.\d{2}(?![.\d])

enter image description here

答案 1 :(得分:1)

试试这个

\b\d+\.\d{2}(?!\.?\d)

here on 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();

答案 2 :(得分:0)

试试这个:

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

我在测试中给出了两个匹配项:

12.00 
15.00