如果只想在字母后删除零,则可以使用:
([a-zA-Z])0+
替换为
1反向引用。请参阅regex演示。
在
([a-zA-Z])将捕获了一封信,
0+将匹配1个或多个零。
Python演示:
import res = 'e004_n07'res = re.sub(r'([a-zA-Z])0+', r'1', s)print(res)
请注意,这 re.sub
将查找并替换所有不重叠的匹配项(将执行全局搜索并替换)。如果不匹配,则将按原样返回字符串,而无需进行修改。因此,无需使用额外的
re.match/
re.search。
UDPATE
要保留1个零(如果数字仅包含零),可以使用
import res = ['e004_n07','e000_n00']res = [re.sub(r'(?<=[a-zA-Z])0+(d*)', lambda m: m.group(1) if m.group(1) else '0', x) for x in s]print(res)
参见Python演示
此处,
r'(?<=[a-zA-Z])0+(d*)'正则表达式
0+将ASCII字母(
(?<=[a-zA-Z]))之后的一个或多个零()匹配,然后使用捕获任何其他数字(0或更多)到组1中
(d*)。然后,在替换中,我们检查第1组是否为空,如果为空,则插入
0(只有零),否则,我们插入第1组的内容(第一个前导零之后的剩余数字)。



