如何用正则表达式匹配首字母缩写对应完整单词及删除重复大写缩写
用正则表达式实现两项文本处理需求
需求一:提取括号包裹的首字母缩写对应的前置完整单词
思路
要提取括号内大写缩写对应的前置完整短语,核心是匹配首字母大写的单词序列,且这些单词的首字母拼接后与括号内的缩写完全一致。先通过正则捕获前置短语和括号内的缩写,再通过额外验证确保两者对应。
正则表达式
(\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)\s*\(([A-Z]+)\)
(\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*):捕获前置的完整短语,匹配首字母大写、其余小写的单词,支持多个单词用空格分隔\s*\(:匹配短语和括号之间的可选空格([A-Z]+):捕获括号内的大写缩写
代码示例(Python)
import re text = 'Lung cancer screening (LCS) reduces NSCLC mortality' pattern = r'(\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)\s*\(([A-Z]+)\)' matches = re.findall(pattern, text) # 验证首字母匹配后输出结果 for full_phrase, acronym in matches: extracted_acronym = ''.join(word[0].upper() for word in full_phrase.split()) if extracted_acronym == acronym: print(full_phrase) # 输出: Lung cancer screening
说明
- 正则会捕获所有符合“大写单词序列 + (大写缩写)”格式的内容,再通过首字母拼接验证筛选出真正对应的短语
- 若文本中存在不匹配的情况(比如前置短语首字母和缩写不一致),会自动过滤掉
需求二:删除文本中重复的大写字母缩写
思路
针对“大写缩写在前,完整名称在后”的重复情况,正则匹配独立的大写缩写(至少2个大写字母)及其后的完整小写短语,然后替换为仅保留完整短语。
正则表达式
\b([A-Z]{2,})\s+((?:[a-z]+(?:\s+[a-z]+)*))
\b([A-Z]{2,}):匹配独立的大写缩写(至少2个大写字母,避免误匹配单个大写字母的单词)\s+:匹配缩写和完整短语之间的空格((?:[a-z]+(?:\s+[a-z]+)*)):捕获缩写后的完整小写短语
代码示例(Python)
import re text = 'HIV acquired immunodeficiency syndrome are at a particularly high risk of cervical cancer' pattern = r'\b([A-Z]{2,})\s+((?:[a-z]+(?:\s+[a-z]+)*))' result = re.sub(pattern, r'\2', text) print(result) # 输出: acquired immunodeficiency syndrome are at a particularly high risk of cervical cancer
说明
- 该正则默认处理“缩写+完整名称”的顺序,若文本中存在“完整名称+缩写”的情况,可调整正则逻辑适配
- 若需要确保缩写是后续短语的首字母缩写,可在替换前增加验证步骤(比如拼接短语首字母与缩写对比)
内容的提问来源于stack exchange,提问作者정다라
相关产品推荐
相关产品推荐

