在Regex Python中查找包含所有大写字母的行

时间:2017-12-06 21:38:41

标签: python regex

我试图找到所有使用正则表达式全部大写的行,到目前为止我已经尝试过这个:

re.findall(r'\b\n|[A-Z]+\b', kaizoku)

到目前为止,我的数据库如下:

TRAFALGAR LAW
You shall not be the pirate king.
MONKEY D LUFFY
Now!
DOFLAMINGO'S UNDERLINGS:
Noooooo!

我希望它返回

TRAFALGAR LAW
MONKEY D LUFFY
DOFLAMINGO'S UNDERLINGS:

但是它又回归了别的东西。 (即:

TRAFALGAR
LAW
Y
MONKEY
D
LUFFY
N
DOFLAMINGO'
S
UNDERLINGS:
N

修改 到目前为止,我认为最适合答案的是@ Jan的回答

rx = re.compile(r"^([A-Z ':]+$)\b", re.M)
rx.findall(string)

EDIT2 发现了什么错,谢谢!

3 个答案:

答案 0 :(得分:3)

你去吧

import re

string = """TRAFALGAR LAW
You shall not be the pirate king.
MONKEY D LUFFY
Now!
DOFLAMINGO'S UNDERLINGS:
Noooooo!
"""

rx = re.compile(r"^([A-Z ':]+$)", re.M)

UPPERCASE = [line for line in string.split("\n") if rx.match(line)]
print(UPPERCASE)

或者:

rx = re.compile(r"^([A-Z ':]+$)", re.M)

UPPERCASE = rx.findall(string)
print(UPPERCASE)

两者都会产生

['TRAFALGAR LAW', 'MONKEY D LUFFY', "DOFLAMINGO'S UNDERLINGS:"]

答案 1 :(得分:3)

不需要正则表达式,python使用方法isupper()

  

如果字符串中的所有套接字符 [4] 都是大写且至少有一个套接字符,则返回true,否则返回false。

     

[4]外壳字符是具有一般类别属性的字符,其中一个是“Lu”(字母,大写),“Ll”(字母,小写)或“Lt”(字母,标题)。

代码

See code in use here

a = [
    "TRAFALGAR LAW",
    "You shall not be the pirate king.",
    "MONKEY D LUFFY",
    "Now!",
    "DOFLAMINGO'S UNDERLINGS:",
    "Noooooo!",
]

for s in a:
    print s.isupper()

结果

True
False
True
False
True
False

答案 2 :(得分:1)

您可以使用[A-Z\W]检查任何大写字母以及非字母数字字符:

import re
s = ["TRAFALGAR LAW", "You shall not be the pirate king.", "MONKEY D LUFFY", "Now!", "DOFLAMINGO'S UNDERLINGS:", "Noooooo!"]
new_s = [i for i in s if re.findall('^[A-Z\d_\W]+$', i)]

输出:

['TRAFALGAR LAW', 'MONKEY D LUFFY', "DOFLAMINGO'S UNDERLINGS:"]