我正在创建一个公制测量转换器。期望用户输入诸如125km
的表达式(数字后跟单位缩写)。对于转换,必须从缩写中拆分数值,从而生成[125, 'km']
等结果。我使用正则表达式re.split
完成了此操作,但它会在结果列表中生成不需要的项目:
import re
s = '125km'
print(re.split('(\d+)', s))
输出:
['', '125', 'km']
我不需要也不想要开头''
。如何简单地将字符串的数字部分与字母部分分开以使用正则表达式生成列表?
答案 0 :(得分:6)
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 :(得分:1)
将字符串拆分为子字符串列表(数字和其他)
使用程序:
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']