在Python中将字符串中的数字与单位分开
我有一些字符串,里面包含数字和单位,比如 2GB、17ft 等等。我想把数字和单位分开,变成两个不同的字符串。有时候,它们之间有空格(比如 2 GB),这时候用 split(' ') 就很简单。
但是当它们连在一起的时候(比如 2GB),我就得一个个检查每个字符,直到找到一个字母,而不是数字。
s='17GB'
number=''
unit=''
for c in s:
if c.isdigit():
number+=c
else:
unit+=c
有没有更好的方法呢?
谢谢
14 个回答
8
你可以使用正则表达式来把字符串分成几个部分:
>>> import re
>>> p = re.compile('(\d+)\s*(\w+)')
>>> p.match('2GB').groups()
('2', 'GB')
>>> p.match('17 ft').groups()
('17', 'ft')
11
当你找到第一个不是数字的字符时,你可以跳出这个循环。
for i,c in enumerate(s):
if not c.isdigit():
break
number = s[:i]
unit = s[i:].lstrip()
如果你还要处理负数和小数:
numeric = '0123456789-.'
for i,c in enumerate(s):
if c not in numeric:
break
number = s[:i]
unit = s[i:].lstrip()
2
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期工作。这时候,我们就需要去寻找解决方案,或者看看其他人是怎么解决类似问题的。
在这个过程中,查看社区的讨论,比如StackOverflow,能帮助我们找到答案。很多时候,其他开发者会分享他们的经验和解决方法,这对我们来说是非常有帮助的。通过阅读这些讨论,我们可以学到很多东西,避免走弯路。
总之,遇到问题时,不要气馁,积极寻找解决方案,并向社区求助,通常能找到你需要的帮助。
s='17GB'
for i,c in enumerate(s):
if not c.isdigit():
break
number=int(s[:i])
unit=s[i:]