2017-10-09 91 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)