gpt4 book ai didi

c# - 正则表达式匹配(贪婪/不贪婪?)

转载 作者:行者123 更新时间:2023-11-30 13:02:49 24 4
gpt4 key购买 nike

我在“分离”这些数据时遇到了一些麻烦。虽然辅助函数等一个选项,但我真的很想只使用正则表达式来解决这个问题(并在匹配后处理匹配组)。

这是我拥有的(部分)数据:

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#应用程序(如果您想知道这是哪种“方言”)。

非常感谢任何帮助。

最佳答案

有时,对于非贪婪匹配,锚定非常重要。在这种情况下,锚定到行尾即可解决问题。你的正则表达式应该是:

^(.+?)(?:\s+(Xxx|[A-Z]_.*))?$

请注意,我还将可选的 (?) 量词移到了另一个分组级别之外,因此空格是可选的。

关于c# - 正则表达式匹配(贪婪/不贪婪?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14376966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com