给定一个数字文本字符串,如“0104002”,我需要返回 01
4002
。
当数字大于 0 时,基本上返回数字文本字符串的第一部分。然后对于第二部分,返回从下一个非零数字开始直到字符串结尾的部分。每个输入的数字位置会有所不同,字符串的长度不会相同
到目前为止,我只能得到我需要的第一部分
def lot(num):
lot=""
for x in num:
lot+=x
y=int(x)
if y>0: break
print lot
lot('0104002')
最佳答案
这对于正则表达式来说似乎是微不足道的事情:
>>> import re
>>> re.match(r'^(0*[^0]+)0+([^0].*)$', '0104002').groups()
('01', '4002')
这个正则表达式定义了两个被一个或多个零分开的组。拆分由出现在第一系列非零之后的第一系列零定义。 split 之前发生的属于第一组, split 之后发生的属于第二组。
对于任何觉得正则表达式令人生畏的人,这里是“冗长”的解释性版本。
re.match(
r'''^
( # Begin first group
0* # Allow for some number of leading zeroes
[^0]+ # Match a series of non-zeroes
) # End first group
0+ # Match some series of zeroes (the separator)
( # Begin second group
[^0] # Match the first non-zero character
.* # Match anything afterward
) # End second group
$
''',
'0104002',
flags=re.VERBOSE).groups()
关于python函数返回第一个非零 strip 中间零并返回数字字符串的最后一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324964/