如何在Python中编写正则表达式以去除字符串中间数字的前导零?

3

我有一个字符串,由字母和数字组成,我需要移除所有的字母,并且移除数字开头的前导零。

比如,在测试字符串U012034中,我想匹配U以及012034开头的0

到目前为止,我已经使用[^0-9]匹配任何非数字字符,但我无法弄清楚如何同时移除数字中的前导零。

我知道我可以使用类似int(re.sub("[^0-9]", "", test_string)的多步骤操作来实现,但我需要使用一个正则表达式完成这个过程。


2
尝试:re.sub(r'^[a-zA-Z]*0*|a-zA-Z]+', '', string) - anubhava
1
我刚想到了“ [ ^1-9 ] ”。这个可行吗? - Leonardo Alves Machado
1
@anubhava 您的正则表达式有效!请随意将您的评论发布为答案,我将很乐意接受它。 - Derek O
2
它应该变成1234。 - Derek O
2
好的,那么U01234BC1怎么样? - anubhava
显示剩余5条评论
3个回答

4

您可以使用

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组的值。


2
您可以在Python中使用以下代码进行替换:re.sub
string = re.sub(r'^[a-zA-Z]*0*|[a-zA-Z]+', '', string)

RegEx演示

解释:

  • ^: 开始
  • [a-zA-Z]*: 匹配0个或多个字母
  • 0*L: 匹配0个或多个零
  • |: 或
  • [a-zA-Z]+: 匹配1个或多个字母

1
这个做你需要的事情吗?
re.sub("[^0-9]+0*", "", "U0123")
>>> '123'

1
它还将把A001B002转换为12 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接