2

この質問は、以前に尋ねた質問(この質問)と非常によく似ていますが、少し変更する必要があります。

したがって、前の質問では、この文字列

Berkshire Hathaway Inc(ティッカー:BRK; NAICS:524126、511130、335212、445292、511110、442210; Duns:00-102-4314)Walt Disney Co(ティッカー:DIS; NAICS:713110、512110、711211、515120; Duns: 00-690-4700)

これらの値で2つの一致を作成します。

バークシャーハサウェイインク
Walt Disney Co

ここで、一致にTicker:XXXまたは会社名を含めてTicker:XXXを優先するようにします。

したがって、上記の例では、次のように一致します。

ティッカー:BRK
ティッカー: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)

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

バークシャーハサウェイインク
ティッカー:DIS

前の質問の正規表現ソリューションを十分に理解していないため、このパターンに合うように正規表現を変更する方法を理解していると思います。

正規表現はC#で書かれています

ちなみに、以前の正規表現ソリューションは次のとおりです。

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

私は今これに変更する必要があると思います:

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

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

4

2 に答える 2

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
于 2012-04-04T19:06:04.410 に答える
2

Expressoなどのツールを使用して正規表現を作成することをお勧めします。これはC#正規表現用に設計されており、使用する必要のあるコードをクリップボードにコピーすることもできます。例をツールに貼り付けてから、正規表現が機能するまで微調整できます。このようなツールは、正規表現を書くための必需品だと思います。

于 2012-04-04T17:14:52.733 に答える