字符串C中的正则表达式匹配号码#

问题描述:

我试图从收据中使用正则表达式得到总价格。字符串C中的正则表达式匹配号码#

的格式是:

TOTAL  15.40 

的目标是只拿到的价格出的字符串。

我开始于TOTAL[ .0-9],但是这只返回了TOTAL这个词。

我用Google搜索周围,共同推杆这一项,但不能得到它的工作:

TOTAL(\\s+)(?<value>[.0-9]+) 

我做了下面的代码:

sRegex = "TOTAL(\\s+)(?<value>[.0-9]+)";  
Match match = Regex.Match(this.sHTMLResult, sRegex, RegexOptions.None); 
if (match.Success) 
    Console.Out.WriteLine("regex good"); 
else 
    Console.Out.WriteLine("regex fail"); 

但正则表达式不返回成功。

我试图把它弄出来的格式像这样的HTML文件:

TOTAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15.40 
+1

适合我。我与包含“15.40”的捕获组匹配。检查你的输入。 – Oded 2013-03-12 10:15:11

+0

好一点,我只用文字进行测试和它的作品,但我尽量把它弄出来的格式像这样的HTML文件:TOTAL           15.40或许正则表达式不看 作为空间 – 2013-03-12 10:21:30

+0

HTTP:/ /txt2re.com/应该是你的新朋友。输出的正则表达式并不完美,但它给你一个很好的起点。 – RoadieRich 2013-03-12 10:21:57

您最初的正则表达式正常工作与提供的文本:

TOTAL(\\s+)(?<value>[.0-9]+) 

然而,正如你在评论中表示,这是由HTML和包含字符实体没有休息空间,所以你需要考虑那些以及:

TOTAL(\\s+|(&nbsp;)+)(?<value>[.0-9]+) 
+0

感谢您的示例,我已经从评论中提出了您的建议,并在执行正则表达式之前将其转换为纯文本,并且效果很好。 – 2013-03-12 10:44:58

+0

@Downvoter - 谨慎评论? – Oded 2013-03-15 09:50:47

如果只有TOTAL,你可以在正则表达式用空格量之间的一个空格。此外,试试这个:

sRegex = "TOTAL ([0-9]+\.[0-9]+)"; 

请参阅here为MSDN参考。

+0

你会注意到由OP发布的正则表达式很好。如果这不匹配,为什么你的比赛会更好? – Oded 2013-03-12 10:18:19

您可以使用:

"TOTAL *(\d*.\d*)"

+0

在.NET中,'\ d'将匹配所有数字,而不仅仅是[[0-9]](例如,阿拉伯数字将匹配)。 – Oded 2013-03-12 10:21:39

您正则表达式的作品(检查您输入的建议),但它有一个小bug:它能够捕捉的数字和点任意组合(如333.3.2.22。 ...)更好的将是:

TOTAL\s+(?<value>\d+\.\d+) 
+0

谢谢你的建议,效果很好。 – 2013-03-12 10:42:36

(?(\b.*\b\s)([0-9.]*[0-9]))应该工作。

我会建议你使用Regex hero online editor这对我来说至少是有帮助的。

+0

为什么这比来自OP的正则表达式更好? – Oded 2013-03-12 10:22:48