2010-12-15 11 views
1

私は、次のうちいくつかのテキストを持ってはサンプルです:私は[0_Chief_Road]の下で、この部分を取得したいこの正規表現で間違っているのは?

2_Chief Ships.Niobe 2 0 2 1.0 
    3_Chief Vehicles.WillisMB_US 1 
[0_Chief_Road] 
    77704.27 140254.33 120.00 0 2 9.166666984558105 
    100653.84 140379.05 120.00 
[2_Chief_Road] 
    76911.77 139996.94 120.00 0 2 3.8583335876464844 
    100446.47 140028.61 120.00 

77704.27 140254.33 120.00 0 2 9.166666984558105 
100653.84 140379.05 120.00 

私はこのコードを使用しています:

System.Text.RegularExpressions.Regex reg = null; 
string routeTitle = "[0_Chief_Road]"; // this is hard coded for StackOverflow 
reg = new System.Text.RegularExpressions.Regex(@"(?<=" + routeTitle + @")[\d\.\s]+(?=\[)"); 
string routeText = reg.Match(chiefsSection).Captures[0].ToString(); 

結果は次のとおりです。

4.27 140254.33 120.00 0 2 9.166666984558105 
    100653.84 140379.05 120.00 

... の後にの後に最初のゼロ!私は値を変更しようとしたし、常に最初のゼロの後のすべてを返します。私は理由を知りません!

誰でも助けてもらえますか?ありがとうございました!

グレッグ

答えて

2

問題はrouteTitleが正規表現で使用する場合、文字クラスとして解釈され、ブラケットが含まれていることです。リテラル文字列をエスケープしてから正規表現に挿入する必要があります。

ですから、string routeTitle = @"\[0_Chief_Road\]";

を使用するか、またはRegex.Escape()機能を使用する必要があります

string routeTitle = "[0_Chief_Road]"; // this is hard coded for StackOverflow 
reg = new System.Text.RegularExpressions.Regex(@"(?<=" + Regex.Escape(routeTitle) + @")[\d\.\s]+(?=\[)"); 

[0_Chief_Road]後のCRLFも試合の一部となることに注意してください - あなたはそれをしたくない場合は、追加lookbehindアサーションの最後に\s+があります。

+0

はい、それです。私を目覚めさせてくれてありがとう! – MrGreggles

関連する問題