我想使用正则表达式来匹配所有大写的子字符串,包括空格。
现在我正在使用正则表达式:\w*[A-Z]\s]
这里正在测试我们在说什么
哪个返回:
HERE
IS
WHAT
ARE
WE
SAYING
但是,我希望它与allcaps的所有子字符串匹配,以便它返回:
HERE IS
WHAT ARE WE SAYING
答案 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']