【问题标题】:Python - Splitting numbers and letters into sub-strings with regular expressionPython - 使用正则表达式将数字和字母拆分为子字符串
【发布时间】:2015-02-03 02:45:16
【问题描述】:

我正在创建一个公制测量转换器。用户应该输入一个表达式,例如125km(一个数字后跟一个单位缩写)。要进行转换,必须将数值从缩写中分离出来,从而产生诸如[125, 'km'] 之类的结果。我使用正则表达式 re.split 完成了此操作,但是它会在结果列表中产生不需要的项目:

import re
s = '125km'
print(re.split('(\d+)', s))

输出:

['', '125', 'km']

我不需要也不想要开头''。如何简单地将字符串的数字部分与字母部分分开,以使用正则表达式生成列表?

【问题讨论】:

  • 你会遇到像kg*(m^2)/(s^2)这样的东西吗?
  • @nhahtdh 很可能不会。
  • @nhahtdh,当然JNm 就足够了:-)
  • @paxdiablo:当然,但对于m/s^2 来说并不那么简单(加速)。
  • @Jacob:能量单位,Jkg*(m^2)/(s^2),或 N*m。也等价于W*h,用于测量耗电量(通常为kW*h,千瓦时)。

标签: python regex split


【解决方案1】:

re.findall 有什么问题?

>>> s = '125km'
>>> re.findall(r'[A-Za-z]+|\d+', s)
['125', 'km']

[A-Za-z]+ 匹配一个或多个字母。 |\d+ 一位或多位数字。

使用列表理解。

>>> [i for i in re.split(r'([A-Za-z]+)', s) if i]
['125', 'km']
>>> [i for i in re.split(r'(\d+)', s) if i]
['125', 'km']

【讨论】:

  • 如果数字有小数怎么办,有没有办法处理这种情况?说 1.25km 我怎样才能得到 ['125', 'km']
  • re.findall(r'[A-Za-z]+|\d+(?:\.\d+)?', s)
【解决方案2】:

将字符串拆分为子字符串列表(数字和其他)

使用程序:

s = "125km1234string"
sub = []
char = ""
num = ""
for letter in s:
    if letter.isdigit():
        if char:
            sub.append(char)
            char = ""
        num += letter
    else:
        if num:
            sub.append(num)
            num = ""
        char += letter
sub.append(char) if char else sub.append(num)
print(sub)

输出

['125', 'km', '1234', 'string']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2016-04-25
    • 2021-03-06
    • 2013-04-26
    相关资源
    最近更新 更多