Python 正则表达式匹配引号中仅包含3个或更少大写单词的字符串
我找了又找,但找不到任何缓解我的正则表达式困境的方法 我写了以下虚拟句子: 观看小乔·史密斯和索尔·卡内洛·阿尔瓦雷斯为WBO腰带GGG与奥斯卡·德拉霍亚和Genaddy Triple-G戈洛夫金的比赛。卡内洛·阿尔瓦雷斯和弗洛伊德·梅威瑟在新泽西州大西洋城打斗。康纳·麦克格雷戈、阿多尼斯·超人史蒂文森和苏格·雷·罗宾逊先生也将出席。“这是一根绳子”金钱梅威瑟'。“这不是字符串”、“这不是字符串”、“这是一个”三字字符串“ 我正在寻找在Python 3.6中使用时将返回以下内容的正则表达式: Canelo,Money,Money Mayweather,三字字符串 最接近我的正则表达式是:Python 正则表达式匹配引号中仅包含3个或更少大写单词的字符串,python,regex,python-3.x,Python,Regex,Python 3.x,我找了又找,但找不到任何缓解我的正则表达式困境的方法 我写了以下虚拟句子: 观看小乔·史密斯和索尔·卡内洛·阿尔瓦雷斯为WBO腰带GGG与奥斯卡·德拉霍亚和Genaddy Triple-G戈洛夫金的比赛。卡内洛·阿尔瓦雷斯和弗洛伊德·梅威瑟在新泽西州大西洋城打斗。康纳·麦克格雷戈、阿多尼斯·超人史蒂文森和苏格·雷·罗宾逊先生也将出席。“这是一根绳子”金钱梅威瑟'。“这不是字符串”、“这不是字符串”、“这是一个”三字字符串“ 我正在寻找在Python 3.6中使用时将返回以下内容的正则表达式: C
(["'])[A-Z](\\?.)*?\1
我希望它只匹配由3个大写或更少的单词组成的字符串,并立即用单引号或双引号括起来。不幸的是,到目前为止,它似乎匹配引号中的任何字符串,无论长度如何,无论内容如何,只要它以大写字母开头
我自己花了很多时间试图破解它,但我遇到了麻烦。任何一个有着更强雷格斯功夫的人能告诉我我哪里出了问题吗?试着用这个:
([“])(((?:[A-Z][A-Z]+?){1,3})\1
([“])
-开场白
([A-Z][A-Z]+?){1,3}
-以空格分隔的大写单词重复1到3次
[A-Z]-大写字符(单词开头字符)
[a-z]+-非大写字符(字尾)
_?-大写单词的空格分隔符(\uu
是空格),?
用于不带结尾空格的单个单词
{1,3}-1到3次
\1
-结束报价,与开始报价相同
第2组是您想要的
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演示:使用您提供的文本,我会尝试使用正则表达式
lookaround
将单词用引号括起来,然后对这些匹配应用一些条件,以确定哪些符合您的标准。以下是我将要做的:
[p for p in re.findall('(?<=[\'"])[\w ]{2,}(?=[\'"])', txt) if all(x.istitle() for x in p.split(' ')) and len(p.split(' ')) <= 3]
清洁剂:
matches = []
for m in re.findall('(?<=[\'"])[\w ]{2,}(?=[\'"])', txt):
if all(x.istitle() for x in m.split(' ')) and len(m.split(' ')) <= 3:
matches.append(m)
print(matches)
# ['Canelo', 'Money', 'Money Mayweather', 'Three Word String']
匹配=[]
对于re.findall中的m(“(?我来试试:([\“”)([A-Z][^]*){1,3})\1
你不需要使用``方括号内的失败来匹配三个单词的表达,比如“我在哪里”或“多么无聊”,因为它假设单词至少有两个字母。也许:([“])(?:[A-Z][A-Z]*\s){0,2}[A-Z]*>
matches = []
for m in re.findall('(?<=[\'"])[\w ]{2,}(?=[\'"])', txt):
if all(x.istitle() for x in m.split(' ')) and len(m.split(' ')) <= 3:
matches.append(m)
print(matches)
# ['Canelo', 'Money', 'Money Mayweather', 'Three Word String']