gpt4 book ai didi

ruby - 排除括号内字符的正则表达式匹配

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:09 24 4
gpt4 key购买 nike

我有以下类型的字符串。

BILL SMITH (USA)
WINTHROP (FR)
LORD AT WAR (GB)
KIM SMITH

对于这些字符串,我有以下约束:1.全部大写2. 可以是 2 到 18 个包机长3.末尾不应有任何空格或回车4.括号内的国家缩写要排除5.有些名字不会有括号中的国家,他们也应该匹配

应用我的正则表达式后,我想得到以下内容:

BILL SMITH (USA)  => BILL SMITH
WINTHROP (FR) => WINTHROP
LORD AT WAR (GB) = LORD AT WAR
KIM SMITH => KIM SMITH

我想出了以下正则表达式,但没有得到任何匹配项:

String.scan(\([A-Z \s*]{1,18})(^?!(\([A-Z]{1,3}\)))\)

我已经为此苦苦思索了一段时间,所以如果有人能指出错误,我将不胜感激。

更新:

我收到了一些很好的回复,但是,到目前为止,没有一个正则表达式解决方案满足所有限制。棘手的部分似乎是某些字符串在括号中包含国家/地区,而另一些则没有。在一种情况下,不匹配没有国家/地区的字符串,而在另一种情况下,它返回正确的字符串以及不带括号的国家/地区缩写。 (请参阅第二个回复的评论。)澄清一点:我将匹配的所有字符串都将是字符串的起点。不确定这是否有帮助。再次感谢您的帮助。

最佳答案

这是一种解决方案:

^((?:[A-Z]|\s){2,18}+?)(?:\s\([A-Z]+\))?$

查看 Rubular .请注意,它在括号之前计算 18 个字符 - 不确定您希望它如何具体表现。如果你想确保整行不超过 18 个字符,我建议你只做 unless line.length < 18 ...同样,如果你想确保最后没有空格,我建议你使用 line.strip .这将大大降低您需要的 Regexp 的复杂性,并使您的代码更具可读性。

编辑:当名称后没有括号时也有效。

关于ruby - 排除括号内字符的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656748/

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