Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配引号中仅包含3个或更少大写单词的字符串_Python_Regex_Python 3.x - Fatal编程技术网

Python 正则表达式匹配引号中仅包含3个或更少大写单词的字符串

Python 正则表达式匹配引号中仅包含3个或更少大写单词的字符串,python,regex,python-3.x,Python,Regex,Python 3.x,我找了又找,但找不到任何缓解我的正则表达式困境的方法 我写了以下虚拟句子: 观看小乔·史密斯和索尔·卡内洛·阿尔瓦雷斯为WBO腰带GGG与奥斯卡·德拉霍亚和Genaddy Triple-G戈洛夫金的比赛。卡内洛·阿尔瓦雷斯和弗洛伊德·梅威瑟在新泽西州大西洋城打斗。康纳·麦克格雷戈、阿多尼斯·超人史蒂文森和苏格·雷·罗宾逊先生也将出席。“这是一根绳子”金钱梅威瑟'。“这不是字符串”、“这不是字符串”、“这是一个”三字字符串“ 我正在寻找在Python 3.6中使用时将返回以下内容的正则表达式: C

我找了又找,但找不到任何缓解我的正则表达式困境的方法

我写了以下虚拟句子:

观看小乔·史密斯和索尔·卡内洛·阿尔瓦雷斯为WBO腰带GGG与奥斯卡·德拉霍亚和Genaddy Triple-G戈洛夫金的比赛。卡内洛·阿尔瓦雷斯和弗洛伊德·梅威瑟在新泽西州大西洋城打斗。康纳·麦克格雷戈、阿多尼斯·超人史蒂文森和苏格·雷·罗宾逊先生也将出席。“这是一根绳子”金钱梅威瑟'。“这不是字符串”、“这不是字符串”、“这是一个”三字字符串“

我正在寻找在Python 3.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]+-非大写字符(字尾)

_?-大写单词的空格分隔符(
\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']