正则表达式用于从文本中提取价格

时间:2011-12-12 23:43:28

标签: c# .net regex

我有以下价格格式:int _。 int ,_ int_ _TL

现在。是可选的。只有当价格大于1000时才会发生。

几个例子

54,12
540,44
5,11
3.331,55

如何使用.NET regex从给定字符串中提取这些值?谢谢。

我也在使用htmlagilitypack,如果有可能,我想使用它。

2 个答案:

答案 0 :(得分:2)

这应该涵盖你......不是专家或任何其他东西,但它有效..

string test = @"<td width='150'><b><font color='#000000' face='Arial' size='5'> 1.777,00</font><font color='#000000' face='Arial' size='2'>&nbsp;TL<td width='150'><b><font color='#000000' face='Arial' size='5'> 395,00</font><font color='#000000' face='Arial' size='2'>&nbsp;TL";
var result = Regex.Matches(test,@"[1-9]*\.?[0-9]*,[0-9]*");
Console.Write(result);

...解释

[1-9] * =任意数字(1-9)和(*)表示多次。我将第一个数字设置为1-9,因为我假设您不会以0开始价格。

\。? =(\)是(。)的转义字符,而(?)表示它是可选的。

[0-9] * =多次重复(0-9)

=您选择的所需分隔符。

检查出来:http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1

答案 1 :(得分:1)

以下是更完整的代码段:

        var regex = @"^(?<Price>[0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)?).*$";

        var regex2 = new Regex(regex);

        var matches = regex2.Matches("123.123,123 TL");

        Console.WriteLine(matches[0].Groups["Price"].Captures[0].ToString());