[英]How to find words in a string containing at least one underscore and capital letters
[英]Regex - Find successive 'words' containing at least 1 capital letter, one digit or one special character
我正在嘗試提取至少包含以下一項的單詞序列:
例如對於以下短語:
我想提取以下項目:
到目前為止,我有以下代碼:
import re
re.findall(r'((\S*[A-Z|0-9|\:|\-]\w*)([\, |\.])?)', 'aBC has been contacting Maria and ere our DDD Code for system DB-54:ABB is 12343-4.')
哪個返回:
[('aBC ', 'aBC', ' '),
('Maria ', 'Maria', ' '),
('DDD ', 'DDD', ' '),
('Code ', 'Code', ' '),
('DB-54:ABB ', 'DB-54:ABB', ' '),
('12343-4.', '12343-4', '.')]
這將返回所有需要的項目,除了它正在拆分 DDD 和代碼。 我的目標是將包含上述項目的連續單詞組合在一起。 'DDD' 'Code' 都是大寫字母,而且是連續的,應該屬於同一個字符串
您可以添加+
來重復該模式。 我對它進行了一些簡化,因為您在不需要的地方使用了反斜杠。 這將產生您想要的 6 個捕獲組:
((\S*[A-Z0-9:-]\w*)($|[ ,.]))+
放入代碼:
import re
m = re.findall(r'(((\S*[A-Z0-9:-]\w*)($|[ ,.]))+)',
'aBC has been contacting Maria and James where their DDD Code for system DB-54:ABB is 12343-4.')
print(m)
Output:
[('aBC ', 'aBC ', 'aBC', ' '),
('Maria ', 'Maria ', 'Maria', ' '),
('James ', 'James ', 'James', ' '),
('DDD Code ', 'Code ', 'Code', ' '),
('DB-54:ABB ', 'DB-54:ABB ', 'DB-54:ABB', ' '),
('12343-4.', '12343-4.', '12343-4', '.')]
這不會拆分連續的比賽
result = re.findall(r'(?:[\w0-9]*[A-Z0-9\-:]+[\w0-9]*\s*)+', text)
但是您可能必須去除空格
map(str.strip, result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.