2017-10-05 21 views
0

Cross Streets~行の後ろにある十字路の値を抽出しようとしています。次の行にはチルダ文字が含まれています。この場合は別の場合は電話番号ですそれ自身または他のいくつかのフィールドによって、ライン上のティルドになります。それはすべて\r\n文字を含む文字列に引かれています。文字列のサブセットを以下に示します。私は、次の例から2015年のVisual StudioでC#を使用していますC#正規表現マーカの間に複数の行を抽出

\r\nVenue:~SOLDOTNA\r\nCross Streets~\r\nDEAD END/STERLING HWY\r\n S KOBUK ST\r\nPhone:~(999) 999-9999\r\nQuadrant:~ES 1\r\n 

、私は最終的に、私は無駄に複数のSOの提案をしようと時間を費やしている"DEAD END/STERLING HWY, S KOBUK ST"

Venue:~SOLDOTNA 
Cross Streets~ 
DEAD END/STERLING HWY 
S KOBUK ST 
Phone:~(999) 999-9999 

を含む文字列を取得したいと思います。私は最近、以下を試してみました:

Regex.Matches(data, "Cross Streets~\r\n(.+?)\r\n.+?~", RegexOptions.Singleline)[0].Groups 
{System.Text.RegularExpressions.GroupCollection} 
    Count: 2 
    IsReadOnly: true 
    IsSynchronized: false 
    SyncRoot: {Cross Streets~ 
DEAD END/STERLING HWY 
S KOBUK ST 
Phone:~} 
    Results View: Expanding the Results View will enumerate the IEnumerable 

Groups[1]は私が探している情報を含んでいるでしょうが、それは最初の行のみが含まれていることを考えます。

Regex.Matches(data, "Cross Streets~\r\n(.+?)\r\n.+?~", RegexOptions.Singleline)[0].Groups[1] 
{DEAD END/STERLING HWY} 
    Captures: {System.Text.RegularExpressions.CaptureCollection} 
    Index: 149 
    Length: 23 
    Name: "1" 
    Success: true 
    Value: "DEAD END/STERLING HWY" 

鉱山などではない同じ環境けどSOウィキ正規表現の記事を介して要求としての私のC#イミディエイトウィンドウに、私はマッチを取得していますが、ここでは正規表現のリンクは、それがすべてで一致していません(...です私がしたいだけではない、まさに、上に示した。)

https://regex101.com/r/HpHSra/3

答えて

0

としてあなたは本当にそれを行うための正規表現を必要としません。 String.Splitメソッドを使用して、必要な結果を検索することができます。 https://dotnetfiddle.net/zvBhMF

:ここ

using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
    string x = @"Venue:~SOLDOTNA 
Cross Streets~ 
DEAD END/STERLING HWY 
S KOBUK ST 
Phone:~(999) 999-9999"; 


     string[] allResults = x.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None).ToArray(); 
     foreach(string y in allResults) 
     { 
      Console.WriteLine(y + " = " +y.Length); 
     } 


     Console.WriteLine(); 


     if(allResults.Contains("Cross Streets~") && allResults.Length > Array.IndexOf(allResults,"Cross Streets~")+1) 
     { 
      Console.WriteLine("Expeced Result : " + allResults[ Array.IndexOf(allResults,"Cross Streets~")+1 ]); 
     } 

    } 
} 

はシオマネキです