2017-09-16 19 views
-1

私のC#アプリケーションの目的は、テキストドキュメントから2つの10進値(緯度、経度)を抽出することです。私はそれらの数字を拾うためにテンプレートを適用しようとしました。これはFramework-3.5プラットフォームの古いアプリです。 「 - 」c#正規表現(RegEx)の一致したグループが一致する文字を返さない

using System.Text.RegularExpressions; 

String BB = "<span style=\"font-family:&quot;Times&quot;,&quot;serif&quot;\">\r\n<i>Lat</i>: 29.48434, <i>Long</i>: -81.562445 <o:p></o:p></span></p>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p class=\"MsoNormal\"><span style=\"font-family:&quot;Times&quot;,&quot;serif&quot;\"><o:p>&nbsp;</o:p></span></p>\r\n<table class=\"MsoNormalTable\" border=\"0\" cellpadding=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"padding:.75pt .75pt .75pt .75pt\">\r\n<p class=\"MsoNormal\"><b><span style=\"font-family:&quot;Times&quot;,&quot;serif&quot;\">Coordinates:</span></b><span style=\"font-family:&quot;Times&quot;,&quot;serif&quot;\">\r\n<i>Lat</i>: 29.48434, <i>Long</i>: -81.562445 <o:p></o:p></span></p>\r\n</td>"; 

string p2 = @".*Lat\D+(-*[0-9]+\.[0-9]+)\D+Lon\D+(-*[0-9]+\.[0-9]+)"; 

Console.WriteLine(p2); 
foreach (Match collection in Regex.Matches(BB, p2)) { 
    foreach (Group gp in collection.Groups) { 
     Console.WriteLine("Match group {0}", gp.Value); 
    } 
} 

私はグループの出力は、[2]が必要です期待81.562445前にサインが、それは(」それもそれを落としたように、それはテンプレートと一致見えます - 。* [0-9] + [ 0-9] +) "!!!グループに ' - '記号を表示させるためにできることはありますか?

picture of output

+0

テキストはありません。あなたはhtmlドキュメントを持っており、regexの代わりにhtmlのテクニックを使うべきです。正規表現は正規表現で、htmlは正規表現ではありません。 – jdweng

+0

それについて考えてみましょう。 HTMLタグとlat-longの間に何もないと仮定してはいけません。つまり、とにかく "通常の"テンプレートを適用する必要があります。最初はそれをやらなければならないかもしれません! "\ D +?\ d"はあらゆる可能性をカバーする最高のものです! –

答えて

2

あなたのパターンは、緯度と経度の値の前に数字以外の文字(\D+)を探して、それが捕捉されるように、-は数字ではありません。非数字の一致が非貪欲、最終的なパターンのHTMLノードを解析する代わりに正規表現とのマッチングについてのコメントについては

string p2 = @".*Lat\D+?(-?[0-9]+\.[0-9]+)\D+Lon\D+?(-?[0-9]+\.[0-9]+)"; 

作るシーケンスの後?\D+?)を使用するようにするには、これがあります一般的に、より良いが、関連する要素の内部テキストが

"\r\nLat: 29.48434, Long: -81.562445 " 

"\r\n\r\n\r\n\r\nCoordinates:\r\nLat: 29.48434, Long: -81.562445 \r\n" 
であることが判明すると、この場合には、それは本当にあなたに多くを得ることはありません210

残りのコンテンツで正確な一致が期待できる場合を除いて、両方とも必要なデータを試してみるために、類似の量のマッサージが必要です。

+0

非常に良い説明。ありがとうございました!今私は彼らが「貪欲」「空腹」「食べる」という意味を知っています! –

関連する問題