正则表达式删除括号内容出错,求助仅删除末尾代码(P37.2)
正则匹配处理括号内容的解决方案
问题分析
你之前使用的正则\(.*\)采用贪婪匹配,会从第一个(匹配到最后一个),导致中间的括号内容甚至括号外的文本也被误删,比如Neonatal(disseminated) listeriosis(P37.2)会被匹配成(disseminated) listeriosis(P37.2),最终只剩Neonatal。以下是针对两种需求的正确正则实现:
一、删除所有括号内的内容
使用排除括号的字符集精准匹配单个括号对:
import re # 匹配任意单个括号及其内部内容 regex_remove_all = r"\([^()]*\)" df['en'] = df['en'].apply(lambda x: re.sub(regex_remove_all, '', x).strip()) df['ko'] = df['ko'].apply(lambda x: re.sub(regex_remove_all, '', x).strip())
[^()]*:匹配任意非括号的字符,确保只匹配单个括号对,不会跨括号贪婪匹配strip():去除替换后可能残留的多余空格
处理后结果:
| en | ko |
|---|---|
| Neonatal listeriosis | 신생아 리스테리아증 |
二、仅删除末尾的(P37.2)
通过$锚定字符串末尾,只匹配最后一个符合格式的括号:
import re # 匹配末尾的(PXX.X)格式内容,若需匹配任意末尾括号可改用 r"\([^()]*\)$" regex_remove_trailing = r"\(P\d+\.\d+\)$" df['en'] = df['en'].apply(lambda x: re.sub(regex_remove_trailing, '', x).strip()) df['ko'] = df['ko'].apply(lambda x: re.sub(regex_remove_trailing, '', x).strip())
\(P\d+\.\d+\)$:精准匹配以(P开头、数字加小数点加数字结尾的末尾括号$:锚定字符串末尾,确保只修改最后一个括号内容
处理后结果:
| en | ko |
|---|---|
| Neonatal(disseminated) listeriosis | 신생아(파종성) 리스테리아증 |
内容的提问来源于stack exchange,提问作者이승우
相关产品推荐
相关产品推荐

