[英]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.