我看到很多问题问如何从字符串中去掉前导零,但我没有看到任何一个问题问如何从字符串中去掉所有前导数字。
我一直在尝试使用 lstrip
、type
函数、isdigit
、切片符号和正则表达式的组合,但还没有找到方法。
有没有简单的方法可以做到这一点呢?
例如:
- "123ABCDEF" 应该变成 "ABCDEF"
- "ABCDEF" 应该保持为 "ABCDEF"
- "1A1" 应该变成 "A1"
- "12AB3456CD" 应该变成 "AB3456CD"
我看到很多问题问如何从字符串中去掉前导零,但我没有看到任何一个问题问如何从字符串中去掉所有前导数字。
我一直在尝试使用 lstrip
、type
函数、isdigit
、切片符号和正则表达式的组合,但还没有找到方法。
有没有简单的方法可以做到这一点呢?
例如:
string.digits
来表示所有数字,它可以很方便地提供一个包含所有数字字符'0123456789'
的字符串,然后再用string.lstrip
去除。>>> from string import digits
>>> s = '123dog12'
>>> s.lstrip(digits)
'dog12'
>>> from string import digits
>>> digits
'0123456789'
>>> '123dog12'.lstrip(digits)
'dog12'
另一方面,RevelWithoutAPulse的答案会去除任何已知为数字的字符。
>>> import re
>>> re.sub('^\d+', '', '123dog12')
'dog12'
那么有什么区别呢?嗯,有两个不同之处:
lstrip
在 RTL 语言上是模糊的。实际上,它会删除前导匹配字符,这些字符可能在右侧。使用正则表达式的 ^
操作符更加直观。以下是一些示例:
>>> '١٩٨٤فوبار٤٢'.lstrip(digits)
'١٩٨٤فوبار٤٢'
>>> re.sub('^\d+', '', '١٩٨٤فوبار٤٢')
'فوبار٤٢'
>>> 'foobar'.lstrip(digits)
'foobar'
>>> re.sub('^\d+', '', 'foobar')
'foobar'
所以...我想结论是要根据您想要做什么选择正确的解决方案。
(对于阿拉伯语示例的注释,阅读从右到左,因此正确的操作是删除右侧的数字)