使用Python从字符串中删除前导数字?

Pol*_*Geo 1 python string python-2.7

我看到许多问题,询问如何从字符串中删除前导零,但我还没有看到任何询问如何从字符串中删除任何和所有前导数字的问题.

我一直在尝试使用函数lstrip,type函数isdigit,切片表示法和正则表达式的组合而尚未找到方法.

有一个简单的方法吗?

例如:

  • "123ABCDEF"应成为"ABCDEF"
  • "ABCDEF"应保留为"ABCDEF"
  • "1A1"应成为"A1"
  • "12AB3456CD"应成为"AB3456CD"

mir*_*ulo 5

一种简单的方法可以表示所有数字string.digits,它只是简单地为您提供一个包含'0123456789'要删除的所有数字字符的字符串string.lstrip.

>>> from string import digits
>>> s = '123dog12'
>>> s.lstrip(digits)
'dog12'
Run Code Online (Sandbox Code Playgroud)


spe*_*ras 5

我想指出,尽管 Mitch 和 RebelWithoutAPulse 的答案都是正确的,但他们做的事情并不相同。

Mitch 的回答将集合 '1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'0' 中的任何字符去掉。

>>> from string import digits
>>> digits
'0123456789'
>>> '123dog12'.lstrip(digits)
'dog12'
Run Code Online (Sandbox Code Playgroud)

另一方面,RevelWithoutAPulse 的 answern 将任何已知为数字的字符向左剥离。

>>> import re
>>> re.sub('^\d+', '', '123dog12')
'dog12'
Run Code Online (Sandbox Code Playgroud)

那么有什么区别呢?嗯,有两个区别:

  • 除了印度阿拉伯数字之外,还有许多其他数字字符
  • lstrip在 RTL 语言上不明确。实际上,它删除了可能在右侧的前导匹配字符。Regexp 的^运算符更直接。

这里有一些例子:

>>> '???????????'.lstrip(digits)
'???????????'
>>> re.sub('^\d+', '', '???????????')
'???????'

>>> 'foobar'.lstrip(digits)
'foobar'
>>> re.sub('^\d+', '', 'foobar')
'foobar'
Run Code Online (Sandbox Code Playgroud)

(注意阿拉伯语的例子,阿拉伯语是从右到左读的,去掉右边的数字是正确的)

所以……我想结论是一定要根据你要做什么来选择正确的解决方案。