正则表达式匹配问题:如何提取字符串第一个下划线后的全部内容
解决第一个下划线后内容提取的问题
嘿,这个坑我踩过!你现在遇到的是正则表达式贪婪匹配的问题——.+会尽可能多地抓取字符,直接跳到最后一个下划线才停下,所以才会截断到最后一个单词。给你两个实用的解决办法:
方法1:修改正则为非贪婪匹配
把正则里的.+改成.+?(非贪婪模式),它就会在碰到第一个下划线时停止匹配,这样就能正确捕获第一个下划线之后的所有内容:
import re test = ['S123X_ILL_BE_BACK','BA34_HASTA_LA_VISTA_BABY','JA3841_SARAH','J102_CONNOR'] result = [re.sub(".+?_(.+)", r"\g<1>", gg) for gg in test] print(result) # 输出:['ILL_BE_BACK', 'HASTA_LA_VISTA_BABY', 'SARAH', 'CONNOR']
方法2:用字符串split方法(更简单高效)
其实完全没必要用正则,Python字符串的split方法支持指定分割次数,直接取第一刀之后的内容就行,代码更简洁易懂:
test = ['S123X_ILL_BE_BACK','BA34_HASTA_LA_VISTA_BABY','JA3841_SARAH','J102_CONNOR'] # 指定分割1次,取分割后的第二部分 result = [gg.split('_', 1)[1] for gg in test] print(result)
这个方法不仅性能更好,而且不需要记正则规则,出错概率更低,个人更推荐这个方案~
内容的提问来源于stack exchange,提问作者Sos
相关产品推荐
相关产品推荐

