2013-03-12 88 views
0

我試圖從收據中使用正則表達式得到總價格。字符串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

回答

1

您最初的正則表達式正常工作與提供的文本:

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

-2

如果只有TOTAL,你可以在正則表達式用空格量之間的一個空格。此外,試試這個:

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

請參閱here爲MSDN參考。

+0

你會注意到由OP發佈的正則表達式很好。如果這不匹配,爲什麼你的比賽會更好? – Oded 2013-03-12 10:18:19

1

您可以使用:

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

+0

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

0

您正則表達式的作品(檢查您輸入的建議),但它有一個小bug:它能夠捕捉的數字和點任意組合(如333.3.2.22。 ...)更好的將是:

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

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

0

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

我會建議你使用Regex hero online editor這對我來說至少是有幫助的。

+0

爲什麼這比來自OP的正則表達式更好? – Oded 2013-03-12 10:22:48