我有一个字符串,由字母和数字组成,我需要移除所有的字母,并且移除数字开头的前导零。
比如,在测试字符串U012034
中,我想匹配U
以及012034
开头的0
。
到目前为止,我已经使用[^0-9]
匹配任何非数字字符,但我无法弄清楚如何同时移除数字中的前导零。
我知道我可以使用类似int(re.sub("[^0-9]", "", test_string)
的多步骤操作来实现,但我需要使用一个正则表达式完成这个过程。
您可以使用
re.sub(r'^\D*0*', '', text)
请查看正则表达式演示。详情请见
^
- 字符串开头\D*
- 零个或多个非数字字符0*
- 零个或多个零。请查看Python演示:
import re
text = "U012034"
print( re.sub(r'^\D*0*', '', text) )
# => 12034
print( re.sub(r'^\D*0*(\d+).*', r'\1', text) )
请查看这个正则表达式演示。 详细说明:
^
- 字符串开始\D*
- 零个或多个非数字字符0*
- 零个或多个零(\d+)
- 第1组: 一个或多个数字 (使用(\d+(?:\.\d+)?)
匹配浮点数或整数值)替换为第1组的值。
re.sub
。string = re.sub(r'^[a-zA-Z]*0*|[a-zA-Z]+', '', string)
解释:
^
: 开始[a-zA-Z]*
: 匹配0个或多个字母0*
L: 匹配0个或多个零|
: 或[a-zA-Z]+
: 匹配1个或多个字母re.sub("[^0-9]+0*", "", "U0123")
>>> '123'
A001B002
转换为12
。 - anubhava
re.sub(r'^[a-zA-Z]*0*|a-zA-Z]+', '', string)
- anubhavaU01234BC1
怎么样? - anubhava