Python 使用正则表达式查找所有完全大写的短语

Python 使用正则表达式查找所有完全大写的短语,python,regex,parsing,Python,Regex,Parsing,我想使用正则表达式匹配所有完全大写的子字符串,包括空格 现在我正在使用regexp:\w*[A-Z]\s] 这是测试我们在说什么 返回: HERE IS WHAT ARE WE SAYING 但是,我希望它与allcaps的所有子字符串匹配,以便它返回: HERE IS WHAT ARE WE SAYING 一个选项是使用模式\s*(?:\w*[^A-Z\s]\w*\s*)+: 这里的想法是在包含一个或多个非大写字母的任何连续单词簇上进行拆分。您可以使用: 输出 ['HERE IS '

我想使用正则表达式匹配所有完全大写的子字符串,包括空格

现在我正在使用regexp:
\w*[A-Z]\s]

这是测试我们在说什么

返回:

HERE
IS
WHAT
ARE 
WE
SAYING
但是,我希望它与allcaps的所有子字符串匹配,以便它返回:

HERE IS 
WHAT ARE WE SAYING 

一个选项是使用模式
\s*(?:\w*[^A-Z\s]\w*\s*)+

这里的想法是在包含一个或多个非大写字母的任何连续单词簇上进行拆分。

您可以使用:

输出

['HERE IS ', ' WHAT ARE WE SAYING']

模式
[\sA-Z]+(?![a-Z])
匹配任何空格或大写字母,后面不跟非大写字母。符号
(?![a-z])
称为负前瞻(请参阅)。

您可以使用单词边界
\b
[^\s]
来防止开始和结束空格。放在一起,它可能看起来有点像:

import re
string = "HERE IS Test WHAT ARE WE SAYING is that OKAY"

matches = re.compile(r"\b[^\s][A-Z\s]+[^\s]\b")
matches.findall(string)

>>> ['HERE IS', 'WHAT ARE WE SAYING', 'OKAY']

您可以使用
[A-Z]+
匹配大写字母和空格,并使用负前视
(?!)
和负后视
(?)禁止第一个和最后一个字符为空格

最后,用
\b
包围模式以匹配单词边界将使其仅匹配完整单词

import re
text = "A ab ABC ABC abc Abc aBc abC C"
pattern = r'\b(?! )[A-Z ]+(?<! )\b'

re.findall(pattern, text)
>>> ['A', 'ABC ABC', 'C']
重新导入
text=“A ab ABC C”

pattern=r'\b(?![A-Z]+(?您也可以使用以下方法:

>>> import re
>>> s = 'HERE IS Test WHAT ARE WE SAYING'
>>> print(re.findall('((?!\s+)[A-Z\s]+(?![a-z]+))', s))
输出:

['HERE IS ', 'WHAT ARE WE SAYING']
在不匹配前导和尾随空格的情况下使用findall():

re.findall(r"\b[A-Z]+(?:\s+[A-Z]+)*\b",s)                                                                            
Out: ['HERE IS', 'WHAT ARE WE SAYING']

@DanielMesejo现在是:-)…不知道为什么,但我想我看到了PHP。我现在在手机上。哦,天啊,用JS代码写。谢谢@DanielMesejo。修复了
\b[^\s][a-Z\s]+[^\s]\b
将匹配像
aBc
这样的单词,如果被非大写的单词包围,则会遗漏像
WE
这样的短单词。测试字符串
A ab aBc
将输出
['aBc','aBc']
['HERE IS ', 'WHAT ARE WE SAYING']
re.findall(r"\b[A-Z]+(?:\s+[A-Z]+)*\b",s)                                                                            
Out: ['HERE IS', 'WHAT ARE WE SAYING']