如何使用正则表达式将字符串的元素转换为列表?

时间:2019-07-02 08:56:08

标签: python regex string

在我要编写的代码中,我想将包含数字的字符串转换为列表,其中每个元素都是该字符串的数字。

我尝试使用sub这个re函数,但是在特定情况下我没有想要的结果。

x = "8 1 2 9 12"
liste= []
final = []

for s in x:
    liste.append(re.sub('\s+',"", s))
for element in liste:
    if element =="":
        liste.remove("")

for b in liste:
    if b != 'X':
        final += [int(b)]
    else:
        final+=["X"]

我希望输出[8,1,2,9,12],但实际输出是[8,1,2,9,1,2]

3 个答案:

答案 0 :(得分:5)

您可以使用拆分和转换非常轻松地完成此操作。 使用此方法的必要条件是,字符串只能包含数字和空格,并且不能包含其他字符。

>>> li = "8 1 2 9 12"
>>> result = [int(i) for i in li.split(' ')]
>>> print(result)
[8, 1, 2, 9, 12]

现在,继续执行您的实现,在第一个for循环for s in x:内,对字符串进行迭代。因此,s取以下值:

>>> for s in x:
...     print(s)
...
8

1

2

9

1
2

当手动检查字符串时,这将创建6个整数值,实际上是5。这是导致您未获得预期结果的主要原因。 如果该字符串应类似于x =“ 12345”,则它将返回[1,2,3,4,5],这是错误的。

答案 1 :(得分:3)

只有空格和数字时才需要使用分割方法

x = "8 1 2 9 12"
print([int(i) for i in x.split()])

output:
[8, 1, 2, 9, 12]

答案 2 :(得分:1)

上一个答案对您来说是最佳做法,但我也建议您考虑使用另一种方式:Regular Expression

>>>import re
>>>x = "8 1 2 9 12"
>>>list(map(int, re.findall(r'\d+', x)))
[8, 1, 2, 9, 12]