正则表达式提取含大写/数字/特殊字符的连续单词序列问题
解决方案
问题分析
当前正则仅能匹配单个符合条件的单词,无法将连续的符合条件单词合并为一个序列,这才导致DDD和Code被拆分。需要调整正则逻辑,匹配连续的、每个都包含目标元素的单词组成的完整序列。
修正后的实现代码
import re text = 'aBC has been contacting Maria and James where their DDD Code for system DB-54:ABB is 12343-4.' # 匹配连续的符合条件单词序列 pattern = r'\b(?:\w*[A-Z0-9:-]\w*(?:\s+))*\w*[A-Z0-9:-]\w*\b' raw_result = re.findall(pattern, text) # 清理结果中的多余空格和末尾标点 cleaned_result = [item.strip(' .,!') for item in raw_result] # 输出格式化结果 for item in cleaned_result: print(f'- {item}')
正则逻辑说明
\b:匹配单词边界,避免部分匹配(比如不会从中间截取单词)\w*[A-Z0-9:-]\w*:匹配单个符合条件的单词——要求单词中至少包含一个大写字母、数字、冒号或连字符(?:\w*[A-Z0-9:-]\w*(?:\s+))*:匹配0次或多次「符合条件的单词 + 空格」结构,实现连续单词的合并- 整个表达式会自动将连续的符合条件单词拼接成一个完整序列
最终输出结果
- aBC
- Maria
- James
- DDD Code
- DB-54:ABB
- 12343-4
内容的提问来源于stack exchange,提问作者ryuzakinho
相关产品推荐
相关产品推荐

