我找了又找,但找不到任何缓解我的regex痛苦。
我写了下面的假句子:
观看乔·史密斯和索尔·卡内洛·阿尔瓦雷斯为WBO腰带GGG与奥斯卡·德拉霍亚和吉纳迪·特里普·戈洛夫金的比赛。卡内洛·阿尔瓦雷斯和弗洛伊德在新泽西州大西洋城的“金钱”梅威瑟之战。康纳·麦格雷戈将与阿多尼斯超人史蒂文森和苏格·雷·罗宾逊先生一同出席。”这是一根线金钱可能会变坏。”这不是一个字符串,这不是一个字符串,这是一个三字字符串。
我正在寻找一个正则表达式,当在Python3.6中使用时,它将返回以下内容:
Canelo,Money,Money Mayweather,三个字的字符串
最接近我的正则表达式是:
(["'])[A-Z](\\?.)*?\1
我希望它只匹配由3个大写或更少的单词组成的字符串,并立即用单引号或双引号括起来。不幸的是,到目前为止,它似乎与引号中的任何字符串都匹配,无论长度如何,无论内容如何,只要它以大写字母开头。
我自己花了很多时间试图破解它,但我撞到了一堵墙。有谁能给我一个更强大的雷鬼功夫的想法,我在这里哪里出错?
最佳答案
试着使用这个:(["'])((?:[A-Z][a-z]+ ?){1,3})\1
(["'])
-开始报价([A-Z][a-z]+ ?){1,3}
-大写单词,重复1到3次,用空格隔开
[A-Z]-大写字符(单词开头字符)
[a-z]+-非大写字符(单词结尾)
_? -大写单词的空格分隔符(_
是空格),?
表示没有结尾空格的单个单词
{1,3}-1到3次\1
-结束报价,与开始报价相同
第二组是你想要的。
Match 1
Full match 29-37 `"Canelo"`
Group 1. 29-30 `"`
Group 2. 30-36 `Canelo`
Match 2
Full match 146-153 `'Money'`
Group 1. 146-147 `'`
Group 2. 147-152 `Money`
Match 3
Full match 318-336 `'Money Mayweather'`
Group 1. 318-319 `'`
Group 2. 319-335 `Money Mayweather`
Match 4
Full match 398-417 `"Three Word String"`
Group 1. 398-399 `"`
Group 2. 399-416 `Three Word String`
RegEx101演示:https://regex101.com/r/VMuVae/4
关于python - 正则表达式以匹配仅包含3个或更少大写单词的引号中的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44853048/