このデータを「分離」して「選択」する際に問題が発生しています。ヘルパー関数などはオプションですが、正規表現のみを使用して(そしてマッチング後にマッチグループを処理して)これを解決したいと思います。
これは私が持っているデータ(の一部)です:
Belgium
Belgium M_Foo
Belgium A_Bar
Belgium M_FooBar
Belgium S_Whooptee Doo
Belgium Xxx
Belgium S_Foo Bar
United Kingdom
United Kingdom W_Foo-Bar
United Kingdom M_Yay
United Kingdom Xxx
United Kingdom S_Derp
United Kingdom F_Doh Lorem
United Kingdom S_Ipsum Dolor
United States of America L_Foo
Macedonia F.Y.R. Xxx
Macedonia F.Y.R. S_Foo Bar
Cyprus (Greek) M_Foo
Congo (Democratic Republic of)
Congo (Democratic Republic of) Q_Yolo
基本的に、これは文字列の配列の「キー/値」の並べ替えです。国名が含まれており(正規化されていないため、ハードコードされた国名や「ルックアップ」を使用できません。国名以外の文字列である可能性があります)、optionally
その後にキーワードXxx
または <random_upcase_char>_<random_text>
.
私は次の正規表現を思いつきました:
^(.+?)(?:\s+(Xxx|[A-Z]_.*)?)
または、最初の一致グループの小さな違い:
^(.*?)(?:\s+(Xxx|[A-Z]_.*)?)
これは、 で始まる最初の文字列に対してはうまく機能しBelgium
ます。これらのレコードについて、次の結果が返されます。
Group 1 Group 2
================================
Belgium
Belgium M_Foo
Belgium A_Bar
Belgium M_FooBar
Belgium S_Whooptee Doo
Belgium Xxx
Belgium S_Foo Bar
ただし、次の行は問題を引き起こします。
Group 1 Group 2
================================
United
United
United
United
United
United
United
United
Macedonia
Macedonia
Cyprus
Congo
Congo
正規表現でやりたいことは次のとおりです。
Group 1 Group 2
================================================
United Kingdom
United Kingdom W_Foo-Bar
United Kingdom M_Yay
United Kingdom Xxx
United Kingdom S_Derp
United Kingdom F_Doh Lorem
United Kingdom S_Ipsum Dolor
United States of America L_Foo
Macedonia F.Y.R. Xxx
Macedonia F.Y.R. S_Foo Bar
Cyprus (Greek) M_Foo
Congo (Democratic Republic of)
Congo (Democratic Republic of) Q_Yolo
しかし、最初の部分が一致しません。最初のマッチグループの貪欲/貪欲でないオプションと関係があると確信していますが、しばらくいじった後、それを機能させることができません...
余分な/その他の/より多くのマッチグループが返されるかどうかは気にしません。正規表現は、.Net C#
アプリケーションで使用することを目的としています (これがどの「方言」であるか疑問に思っている場合)。
どんな助けでも大歓迎です。