如何用Python正则表达式移除列表中特定模式的字母g
仅移除数字后独立g的正则替换方案
给定原始列表:
original_list = ['12kg','900g', '2,7kg', '801g', '15', '3,63kg', '1kg']
要实现仅移除<number>g模式的字母g(保留kg中的g),可以使用反向否定环视+结尾匹配的正则表达式,结合列表推导式完成替换:
解决方案代码
import re original_list = ['12kg','900g', '2,7kg', '801g', '15', '3,63kg', '1kg'] new_list = [re.sub(r'(?<![kK])g$', '', item) for item in original_list] print(new_list)
运行后得到目标列表:
['12kg', '900', '2,7kg', '801', '15', '3,63kg', '1kg']
正则表达式解释
(?<![kK]):反向否定环视,确保匹配的g前面不是k或K,避免误删kg里的gg$:匹配字符串结尾的g,保证只处理以g结尾且符合前面条件的内容
分析你之前的尝试问题
[^kK]g:这个表达式会匹配「任意非k/K字符+g」,比如900g里的0g会被整体匹配,替换时会把0也删掉,导致结果错误[^kK]g$:同样会匹配「非k/K字符+结尾g」,比如900g的0g,替换后会变成90而不是900,不符合需求[^kK](g):虽然捕获了g,但前面的非k/K字符也会被纳入匹配范围,替换时如果只保留组1的话,虽然在你的列表里可能看起来结果对,但会误处理非数字结尾的g(比如abcg会变成abc),逻辑上没有精准匹配「数字+g」的场景,不如环视方案严谨
内容的提问来源于stack exchange,提问作者Tiago Shimizu
相关产品推荐
相关产品推荐

