简单的C#正则表达式匹配问题

时间:2013-12-20 10:52:31

标签: c# regex

我在使用RegEx匹配从给定字符串中提取值时遇到问题,我正在使用的字符串在下面。

  

533 x 1981mm,35mm厚 - 非防火门:£33.14

我有的RegEx,如果字符串如下,则可以正常工作

  

533 x 1981mm,35mm厚:33.14英镑

^(?<first>\d+)\s*x\s*(?<second>\d+)mm,\s*(?<third>\d+)mm Thick: £(?<price>\d+\.\d+)$

我的问题是,如何更改RegEx以忽略最后一个'mm'和'£'符号之间的任何内容?

我的代码提取毫米测量值,将它们转换为英寸并将字符串返回给我的方法。其余代码如下。

var first = Int32.Parse(match.Groups["first"].Value);
var second = Int32.Parse(match.Groups["second"].Value);
var third = Int32.Parse(match.Groups["third"].Value);
var price = Decimal.Parse(match.Groups["price"].Value, CultureInfo.InvariantCulture);

谢谢大师!

2 个答案:

答案 0 :(得分:3)

mm Thick: £替换为mm.*?£

.*?表示“任意次数匹配任何字符(.),包括零(*),尽可能少(?)”< / p>

答案 1 :(得分:1)

使用[^£]+获取1个或多个不是£的字符。

^(?<first>\d+)\s*x\s*(?<second>\d+)mm,\s*(?<third>\d+)mm[^£]+£(?<price>\d+\.\d+)$