有什么方法可以在Python中出现整数的地方分割字符串吗?

问题描述 投票:0回答:3

我抓取了一些数据,但它把它们全部塞到一个地方,所以我试图分割一个字符串列表,而字符串是由字符串字符和数字组成的。我想在数字出现时将它们分开,并从中为自己制作一个数据表。

想象有一个字符串列表:

string0 = 'string123' ; string1 = 'a12' ; string2 = 'bob69'....

有人知道我该怎么做吗?

python string split
3个回答
2
投票

使用正则表达式怎么样?即python中的重新打包,结合split方法?像这样的东西可以工作:

import re
string = 'string01string02string23string4string500string'

strlist = re.split('(\d+)', string)
print(strlist)
['string', '01', 'string', '02', 'string', '23', 'string', '4', 'string', '500', 'string']

然后,我认为您需要在您的情况下组合列表中的所有其他元素,所以像这样:

cmb = [i+j for i,j in zip(strlist[::2], strlist[1::2])]
print(cmb)

['string01', 'string02', 'string23', 'string4', 'string500']

0
投票

您可以使用仅具有后向和前向的正则表达式进行拆分(请参阅

re
文档以供参考):

import re
re.split('(?<=\D)(?=\d)', string0)

输出:

['string', '123']

注意。如果您想拆分从非数字到数字的任何更改,反之亦然:

re.split('(?<=\D)(?=\d)|(?<=\d)(?=\D)', 'abc123abc123')

## OR

re.findall('(\D+|\d+)', 'abc123abc123')

输出:

['abc', '123', 'abc', '123']


0
投票

考虑使用具有更多控制权的正则表达式:要解析多少位,例如 1 或 2:

s = "of-r1-gi1-1-333 lala22l _22"
pattern = re.compile("((?<!\d)\d{1,2}(?!\d))")
pattern.split(s)
# ['of-r', '1', '-gi', '1', '-', '1', '-333 lala', '22', 'l _', '22', '']

更多控制:

filter(lambda x: x.isdigit(), pattern.split(s))
# ['1', '1', '1', '22', '22']
© www.soinside.com 2019 - 2024. All rights reserved.