我正在尝试将文本分成几个列表。我尝试了几种方法,但没有成功。
这里是一个例子:
text_1 = "A-0 100 20 10 A-1 100 12 6 A-2 100 10 5"
我想要的结果如下:
[['A-0', '100', '20', '10'], ['A-1', '100', '12', '6'], ['A-2', '100', '10', '5']]
我使用正则表达式将A-
标识为拆分的分隔符。但是,我正在努力将其拆分。也许有更好的方法来解决这个问题?
这只是一个例子,因为我使用的解决方案是我设法构建的PDF数据提取器。
答案 0 :(得分:1)
如果您知道总是会有4
组,可以玩zip
和iter
x = iter(text_1.split())
然后
list(zip(*[x]*4)) # or list(zip(x,x,x,x))
收益
[('A-0', '100', '20', '10'),
('A-1', '100', '12', '6'),
('A-2', '100', '10', '5')]
答案 1 :(得分:0)
我认为使用内置字符串方法.split
可能会容易一些。这样,您可以执行以下操作:
# Add whitespace at the end of text_1 so that
# the final split will be the same format as all other splits
text_1="A-0 100 20 10 A-1 100 12 6 A-2 100 10 5" + " "
step1 = text_1.split("A-")
# [1:] here because we want to ignore the first empty string from split
step2 = ["A-" + i for i in step1[1:]]
# [:-1] here because we know the last element in the new split will always be empty
# because of the whitespace before the next "A-"
final = [i.split(' ')[:-1] for i in step2]
最终将是:
[['A-0', '100', '20', '10'],
['A-1', '100', '12', '6'],
['A-2', '100', '10', '5']]
这适用于任意大小的列表。
答案 2 :(得分:0)
这是我的恳求:
text_1 = "A-0 100 20 10 A-1 100 12 6 A-2 100 10 5"
# split text by space
text_array = text_1.split()
# result: ['A-0', '100', '20', '10', 'A-1', '100', '12', '6', 'A-2', '100', '10', '5']
# get array length
text_array_size = len(text_array)
# which is 12 in this case
formatted_text_array = []
# create a loop which runs 3 times and split youre array 4 by 4
for i in range(int(text_array_size/4)):
formatted_text_array.append(text_array[i*4:i*4+4])
print(formatted_text_array)
# result: [['A-0', '100', '20', '10'], ['A-1', '100', '12', '6'], ['A-2', '100', '10', '5']]
答案 3 :(得分:0)
如果要使用正则表达式(正则表达式很酷)并且每个子列表中都有动态数量的项目,请尝试以下操作:
import re
text_1 = "A-0 100 20 10 A-1 100 12 6 A-2 100 10 5"
my_list = re.findall(r'A-[^A]*', text_1)
for i in range(0, my_list.__len__()):
my_list[i] = my_list[i].split()
print(my_list)
答案 4 :(得分:0)
基于正则表达式的方法-因为您已经在使用正则表达式作为解决方案:
from re import split
def split_lst(regex, string):
return filter(lambda x: x.strip(), split(regex, string))
text_1 = "A-0 100 20 10 A-1 100 12 6 A-2 100 10 5"
print(list(map(
lambda x: list(split_lst(r"\s", x)),
split_lst(r"(A-\d+\s+\d+\s+\d+\s+\d+)", text_1)
)))
[['A-0', '100', '20', '10'], ['A-1', '100', '12', '6'], ['A-2', '100', '10', '5']]