我在“分离”这些数据时遇到了一些麻烦。Altough 辅助函数等是一个选项,我真的很想只使用正则表达式来解决这个问题(并在匹配后处理匹配组)。
这是(部分)我拥有的数据:
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#
应用程序(以防您想知道这是哪种“方言”)。
任何帮助将不胜感激。