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

时间:2018-11-28 02:03:26

标签: python regex parsing

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

现在我正在使用正则表达式:\w*[A-Z]\s]

这里正在测试我们在说什么

哪个返回:

HERE
IS
WHAT
ARE 
WE
SAYING

但是,我希望它与allcaps的所有子字符串匹配,以便它返回:

HERE IS 
WHAT ARE WE SAYING 

6 个答案:

答案 0 :(得分:2)

您可以使用单词边界\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']

答案 1 :(得分:0)

一种选择是将re.split与模式\s*(?:\w*[^A-Z\s]\w*\s*)+一起使用:

input = "HERE IS Test WHAT ARE WE SAYING"
parts = re.split('\s*(?:\w*[^A-Z\s]\w*\s*)+', input)
print(parts);

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

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

答案 2 :(得分:0)

您可以使用findall

import re

text = 'HERE IS Test WHAT ARE WE SAYING'
print(re.findall('[\sA-Z]+(?![a-z])', text))

输出

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

模式[\sA-Z]+(?![a-z])与任何空格或大写字母匹配,后跟无大写字母。符号(?![a-z])被称为否定前瞻(请参阅Regular Expression Syntax)。

答案 3 :(得分:0)

您可以使用[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']

答案 4 :(得分:0)

您还可以使用以下方法:

>>> 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']

答案 5 :(得分:0)

使用findall()而不匹配开头和结尾空格:

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