在Python中将字符串中的数字与单位分开

9 投票
14 回答
14882 浏览
提问于 2025-04-15 19:07

我有一些字符串,里面包含数字和单位,比如 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:]

撰写回答