2012-04-04 4 views
2

この質問は私が尋ねた以前の質問に非常に似ていますが、少し変更する必要があります(This Question)。Regex Split特定の単語パターンでの文字列マッチグループ内の異なる値

だから、以前の質問にこの文字列

 
Berkshire Hathaway Inc (Ticker: BRK; NAICS: 524126, 511130, 335212, 445292, 511110, 442210; Duns: 00-102-4314) Walt Disney Co (Ticker: DIS; NAICS: 713110, 512110, 711211, 515120; Duns: 00-690-4700) 

は、これらの値との2試合を作成します。

 
Berkshire Hathaway Inc 
Walt Disney Co 

は今、私はマッチがティッカーを入れたい:好みにXXXまたは会社名は、に行きますティッカー:XXX。

だから、それが一致し、上記例:

 
Ticker: BRK 
Ticker: DIS 

そして、この例のために:

 
Berkshire Hathaway Inc (NAICS: 524126, 511130, 335212, 445292, 511110, 442210; Duns: 00-102-4314) Walt Disney Co (Ticker: DIS; NAICS: 713110, 512110, 711211, 515120; Duns: 00-690-4700) 

結果は次のようになります。

 
Berkshire Hathaway Inc 
Ticker: DIS 

私はちょうどドンと思います」前の質問の正規表現解を理解して、このパターンに合うように修正する方法を理解することができます。

正規表現は、前回の正規表現のソリューションは、ところでC#の

にして書かれている:

私は今、このように変更する必要があり推測
(?!\s*$)(.*?)(?:\([^)]*(?:(?:SIC|NAICS):[^)]*)+\)|$) 

(?!\s*$)(.*?)(?:\([^)]*(?:(?:SIC|NAICS|Duns):[^)]*)+\)|$) 

が、どのように行います私はティッカーを抽出します:そしてティッカーが存在する場合、その値を他の値よりも選択しますか?

答えて

4

私はまだ正規表現を学んでいるので、グループで条件付きロジックを使用できるかどうかはわかりません。

(?!\s*$)(.*?)(?:\((Ticker:[^;]+)?[^)]*(?:(?:SIC|NAICS|Duns):[^)]*)+\)|$) 

は、その後、あなたのC#コードのロジックを行うことができます:それが存在する場合、それはまた、ティッカーのためのグループをキャプチャするように、次のようにかかわらず、別の方法として、あなたは正規表現を修正することができます。私はこのような何かがうまくいくと思います:

Regex regex = new Regex(@"(?!\s*$)(.*?)(?:\((Ticker:[^;]+)?[^)]*(?:(?:SIC|NAICS|Duns):[^)]*)+\)|$)"); 
Match match = regex.Match("Berkshire Hathaway Inc (NAICS: 524126, 511130, 335212, 445292, 511110, 442210; Duns: 00-102-4314) Walt Disney Co (Ticker: DIS; NAICS: 713110, 512110, 711211, 515120; Duns: 00-690-4700)"); 
while (match.Success) { 
    if (match.Groups[2].Success) 
    { 
     Console.WriteLine(match.Groups[2].Value); 
    } 
    else 
    { 
     Console.WriteLine(match.Groups[1].Value); 
    } 
    match = match.NextMatch(); 
} 

出力:私が使用している

Berkshire Hathaway Inc 
Ticker: DIS 
+0

ヘクタール。簡単なので、私はそのソリューションが好きです。 –

+0

条件付きロジックをグループbtwに使用することはできません。正規表現は単にテキストを構文解析することを意味します –

+1

@JustinPihonyヒントをお願いします!いつも喜んで受け取った:) – Robbie

2

Expressoのようなツールを使用して正規表現を修正することをお勧めします。 C#Regex用に設計されており、使用するコードをクリップボードにコピーします。例をツールに貼り付け、正規表現が機能するまで微調整することができます。私はこのようなツールが正規表現を書くための必須項目であると感じています。

+0

[ラッドソフトウェア](http://www.radsoftware.com.au/?from=RegexDesigner)とそれはテストに役立ちますが、私はまだ正規表現に新しいので、私はまだ構文を理解しているか分かりません。 –

+0

正規表現のバディは無料でもありませんが、素晴らしいです –

関連する問題