How would I limit match/replacement the leading zeros in e004_n07? However, if either term contains all zeros, then I need to retain one zero in the term (see example below). For the input string, there will always be 3 digits in the first value and 2 digits in the second value.
Example input and output
If you want to only remove zeros after letters, you may use:
\1 backreference. See the regex demo.
([a-zA-Z]) will capture a letter and
0+ will match 1 or more zeros.
import re s = 'e004_n07' res = re.sub(r'([a-zA-Z])0+', r'\1', s) print(res)
re.sub will find and replace all non-overlapping matches (will perform a global search and replace). If there is no match, the string will be returned as is, without modifications. So, there is no need using additional
To keep 1 zero if the numbers only contain zeros, you may use
import re s = ['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)
See the Python demo
r'(?<=[a-zA-Z])0+(\d*)' regex matches one or more zeros (
0+) that are after an ASCII letter (
(?<=[a-zA-Z])) and then any other digits (0 or more) are captured into Group 1 with
(\d*). Then, in the replacement, we check if Group 1 is empty, and if it is empty, we insert
0 (there are only zeros), else, we insert Group 1 contents (the remaining digits after the first leading zeros).