2017-12-12 6 views
-1

私は、VB.netを使用してHTML内部から変わる可能性のある小数値を抽出しようとしています。私はここでその発現が見出さ、FYIVB.netは可変値を<span>タグ内に抽出しますか?

Dim result As String = "<td class='fl'><label>Balance:</label></td><td nowrap class='fd'><span>$999,999.99</span></td></tr></table></td>" 
Dim RegexResult = Regex.Match(result, "^(\$|)([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$") 
Console.WriteLine(RegexResult) 

:試験の一種として

は、ここで私が使用しているコードである

この例では、抽出された結果は次のようになります。 $999999.99。これは、ドル記号を削除するように変更されます。

Visual Studioコンソールで表示される正規表現の結果は{}です。式を変更して<span>タグを考慮するにはどうすればよいですか?

+0

そして、何そのフォーマットに合わせて、ページ上の他の数字がある場合はどうなりますか?正規表現はその用途を持っていますが、私はそれがあなたの状況に最適だとは思わない。そこにhtmlパーザーがたくさんあるので、あなたはその値をもっときれいに得ることができます。 – soohoonigan

+0

soohooniganが言うように、[HTMLAgilityPack](http://html-agility-pack.net/)のようなものを考えてみてくださいこの正確な目的のために –

答えて

0

regexが動作する場合でも、正規表現を使用して動的HTMLコンテンツを解析しないでください。

それははるかに信頼性の高いソリューションです、HtmlAgilityPackのような利用できるHTMLパーサを使用します。

Dim html = "<td class='fl'><label>Balance:</label></td><td nowrap class='fd'><span>$999,999.99</span></td></tr></table></td>" 
Dim doc As New HtmlAgilityPack.HtmlDocument() 
doc.LoadHtml(html) 
Dim td = doc.DocumentNode.SelectSingleNode("//*[contains(@class,'fd')]") 
Dim spanText = td.Descendants("span").First().InnerText 
Dim balance As Decimal 
Dim usCulture = New CultureInfo("en-us") 
Dim valid = Decimal.TryParse(spanText, NumberStyles.Currency, usCulture, balance) 
+0

見栄えは良いですが、CultureInfoとNumberStylesはどこから来たのですか? –

+0

@JeffreyOllendorf System.Globalization –

関連する問題