0

テキストの文字列を処理するために RegEx を使用する必要がありますが、必要な部分だけを返します。たとえば、文字列が次のようになっているとします。

1234,Weapon Types,100,Handgun,"これがテキストで、"そして"、それだけです。"""

\d*,Weapon Types,(\d*),(\w+), ほとんどの方法で私を取得しますが、私が問題を抱えているのは最後の部分です。残りの文字列をキャプチャする方法はありますか

「これがテキスト、「そして」、それだけです」」

引用符を拾わずに?それらを否定しようとしましたが、引用符で文字列を停止するだけです。

この文字列のテキストは不明であるため、リテラル マッチを実行しても機能しないことに注意してください。

4

1 に答える 1

1

あなたは私たちに解決するのが非常に難しいものを与えました。文字列内にカンマをネストしても問題ありません。二重引用符に出くわしたら、最後の引用符まですべてを無視できます。これにより、コンマが削除されます。

しかし、パーサーは、次の二重引用符が文字列を終了していないことをどうやって知るのでしょうか。ネストされた二重引用符であることをどのように認識しますか?

入力文字列を少し変更して、ネストされた引用符が何であるかを明確にすることができれば、解析は簡単です...

        var txt = "1234,Weapon Types,100,Handgun,\"This is the text, "and", that is all.\",other stuff";
        var m = Regex.Match(txt, @"^\d*,Weapon Types,(\d*),(\w+),""([^""]+)""");
        MessageBox.Show(m.Groups[3].Value);

しかし、入力文字列にそのようなネストされた引用符が必要な場合は、文字列の実際の末尾を検出するための別のルールを考え出す必要があります。これはどう?

        var txt = "1234,Weapon Types,100,Handgun,\"This is the text, \"and\", that is all.\",other stuff";
        var m = Regex.Match(txt, @"^\d*,Weapon Types,(\d*),(\w+),""(.+)"",");
        MessageBox.Show(m.Groups[3].Value);

結果は…

これが「そして」というテキスト、それだけです。

于 2013-03-07T22:13:32.677 に答える