我的文字类似于以下两个示例字符串
this book was sold for 12.00 on 12.12.2010
he paid 12.12.2010 , and puchased an amount of 15.00
从这些行我想要使用正则表达式来捕获数量,而不是日期。
答案 0 :(得分:3)
您可以使用
\d+\.\d{2}(?![.\d])
如果你只需要区分完全这种格式的日期和完全这种格式的货币金额。
此正则表达式查找模式数字,点,两位数,但前提是不后跟另一个点或其他数字(以防止日期匹配) )。
快速PowerShell测试:
以dd.mm.yy
格式更新短日期(以防您需要):
(?<![.\d])\d+\.\d{2}(?![.\d])
答案 1 :(得分:1)
试试这个
\b\d+\.\d{2}(?!\.?\d)
\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