2024-10-01 07:10:58 发布
网友
如何限制e004_n07中前导零的匹配/替换?但是,如果任一项包含所有零,那么我需要在该项中保留一个零(参见下面的示例)。对于输入字符串,第一个值总是有3个数字,第二个值总是有2个数字。在
输入和输出示例
e004_n07 #e4_n7 e020_n50 #e20_n50 e000_n00 #e0_n0
这可以用re.sub公司一个人,还是我需要使用搜索/re.匹配?在
如果只想删除字母后的零,可以使用:
([a-zA-Z])0+
替换为\1反向引用。参见regex demo。在
\1
([a-zA-Z])将捕获一个字母,0+将匹配1个或多个零。在
([a-zA-Z])
0+
Python demo:
请注意,^{}将查找并替换所有不重叠的匹配项(将执行全局搜索和替换)。如果没有匹配项,字符串将按原样返回,不做任何修改。因此,不需要使用额外的re.match/re.search。在
re.match
re.search
UDPATE
如果数字只包含零,要保持1为零,可以使用
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)
参见Python demo
在这里,r'(?<=[a-zA-Z])0+(\d*)'regex匹配ASCII字母((?<=[a-zA-Z]))后面的一个或多个零(0+),然后用(\d*)将任何其他数字(0或更多)捕获到组1中。然后,在替换中,我们检查组1是否为空,如果它是空的,我们插入0(只有零),否则,我们插入第1组的内容(第一个前导零之后的剩余数字)。在
r'(?<=[a-zA-Z])0+(\d*)'
(?<=[a-zA-Z])
(\d*)
0
如果您的要求是必须使用regex,那么下面是您的regex模式:
regex
>>> import re >>> s = 'e004_n07' >>> line = re.sub(r"0", "", s) >>> line 'e4_n7'
但是,当有其他有效的方法来执行相同的操作时,建议不要使用regex,即使用replace函数
replace
如果您的替代品如此简单,则无需使用re.sub,只需使用str.replace:
re.sub
str.replace
s = 'e004_n07' s.replace('0', '') # => 'e4_n7'
如果只想删除字母后的零,可以使用:
替换为
\1
反向引用。参见regex demo。在([a-zA-Z])
将捕获一个字母,0+
将匹配1个或多个零。在Python demo:
^{pr2}$请注意,^{} 将查找并替换所有不重叠的匹配项(将执行全局搜索和替换)。如果没有匹配项,字符串将按原样返回,不做任何修改。因此,不需要使用额外的
re.match
/re.search
。在UDPATE
如果数字只包含零,要保持1为零,可以使用
参见Python demo
在这里,
r'(?<=[a-zA-Z])0+(\d*)'
regex匹配ASCII字母((?<=[a-zA-Z])
)后面的一个或多个零(0+
),然后用(\d*)
将任何其他数字(0或更多)捕获到组1中。然后,在替换中,我们检查组1是否为空,如果它是空的,我们插入0
(只有零),否则,我们插入第1组的内容(第一个前导零之后的剩余数字)。在如果您的要求是必须使用
regex
,那么下面是您的regex模式:但是,当有其他有效的方法来执行相同的操作时,建议不要使用regex,即使用
^{pr2}$replace
函数如果您的替代品如此简单,则无需使用
re.sub
,只需使用str.replace
:相关问题 更多 >
编程相关推荐