2017-10-09 88 views
-1

我试图使用Python re.findall匹配字符串下列条件的字符串:蟒蛇的findall以匹配都大写

contain all uppercase letters 
have numbers present sometimes 

我试图

ab_list = re.findall(r'([A-Z]+)(\.\d+)', text) 

但这并不返回任何东西。

+1

您当前的模式似乎也试图匹配像'ABC.123','XYZ.4'等字符串(它所做的)。你确定你的条件合适吗?也许你应该展示一些示例输入和输出。 – ekhumoro

回答

2

你可以试试这个:

import re 
s = ["ALL CAPITALS ARE ON", "Some lower, soMe not", "AGAIN, WITH PUNCTIONATION."] 
final_data = [i for i in s if re.findall("^[A-Z0-9\W]+$", i)] 

输出:

​​

如果你正在努力寻找单词都大写:

s = ["NOT (LOWER)", "Some lower, soMe not", "AGAIN, WITH PUNCTIONATION.", "young 10 (MODY10)"] 
final_data = [b for b in [re.findall("(?<=\().*?(?=\))", i) for i in s] if b and re.findall("^[A-Z0-9\W]+$", b[0])] 
final_data = [b for b in [re.findall("\(([A-Z0-9\W])\)", i) for i in s] if b] 

输出:

[['LOWER'], ['MODY10']] 

如果你有一个长的字符串:

s = 'NOT (LOWER)Some lower, soMe notAGAIN, WITH PUNCTIONATION.young 10 (MODY10)' 
final_strings = re.findall("\(([A-Z0-9\W]+)\)", s) 

输出:

['LOWER', 'MODY10'] 
+0

谢谢,但它实际上有时是数字,而不是标点 – user6792790

+0

@ user6792790请看我最近的编辑。 – Ajax1234

+0

我正试图从“青少年10(MODY10)”中获得“MODY10”,这是不起作用的。 – user6792790

1

这会找到只包含大写字母,数字和空格的字符串。

re.findall('^[A-Z0-9 ]+$', text) 

这将返回一个包含字符串的列表,如果匹配,否则返回一个空列表。但是,如果您只想检测整个字符串是否匹配,则使用re.match而不是re.findall可能会更直接。这取决于你最终想做什么。

如果你想应该找到个人的话,你可能会想:

re.findall('([A-Z0-9]+)', text)