从正则表达式输出创建列表列表

Creating a list of lists from a RegEx output

提问人:MJP 提问时间:9/6/2023 最后编辑:DharmanMJP 更新时间:9/7/2023 访问量:126

问:

我正在尝试将带有换行符的字符串转换为列表列表,每个列表都从换行符开始,并将列表中的每个单词转换为它自己的单个字符串。

我想把这个:

string = 'milk,eggs,peanut butter,oatmeal\nbutter,pancake mix,maple syrup\ndog treats,milk,milk'

进入这个:

list_of_lists =  [['milk','eggs','peanut butter','oatmeal'],
 ['butter','pancake mix','maple syrup'],
 ['dog treats','milk','milk']]

我采取的方法是使用 RegEx 来获得以下输出:

import re
list1 = re.findall(r'[ \n\t\w]+', string)

['milk',
 'eggs',
 'peanut butter',
 'oatmeal\nbutter',
 'pancake mix',
 'maple syrup\ndog treats',
 'milk',
 'milk']

但我不确定之后到底需要什么语法。任何帮助将不胜感激 - 谢谢。

Python 正则表达式 字符串 列表 拆分

评论

1赞 Maria K 9/6/2023
是否一定要使用正则表达式?因为您的示例任务是通过简单的拆分实现的list(map(lambda row: row.split(','), string.split('\n')))
1赞 Steven Rumbalski 9/6/2023
此字符串是否来自 csv 文件?如果是这样,有更好的方法来处理这个问题。
1赞 JRiggles 9/6/2023
@MariaK 您可以跳过并完全使用列表推导式maplambda

答:

6赞 C.Nivs 9/6/2023 #1

我认为你根本不需要正则表达式:

string = 'milk,eggs,peanut butter,oatmeal\nbutter,pancake mix,maple syrup\ndog treats,milk,milk'


result = [val.split(',') for val in string.split('\n')]

这给了

[['milk', 'eggs', 'peanut butter', 'oatmeal'], ['butter', 'pancake mix', 'maple syrup'], ['dog treats', 'milk', 'milk']]

评论

0赞 MSH 9/6/2023
我会在这个例子中使用你的代码。这很清楚,很好。但是,这仍然不是答案。也许OP简化了这个问题。
0赞 C.Nivs 9/6/2023
@MSH是什么给你留下了这样的印象?
3赞 Steven Rumbalski 9/6/2023
@MSH 它给出了请求的确切输出。怎么不是答案?
2赞 JRiggles 9/6/2023
@MSH OP表示,他们尝试使用正则表达式,但没有得到预期的结果。他们从来没有说过使用正则表达式需要答案。
2赞 MJP 9/6/2023
感谢您的回复。我不需要使用正则表达式,但我一直在尝试在我的代码中加入更多的正则表达式,只是为了更熟悉它,但似乎它在这里弊大于利。
2赞 Andrej Kesely 9/6/2023 #2

这是使用 的版本,但对于这个简单的示例,请使用 @C.Nivs 答案:re

import re

s = "milk,eggs,peanut butter,oatmeal\nbutter,pancake mix,maple syrup\ndog treats,milk,milk"

print([re.findall(r"[^,]+", group) for group in re.findall(r"[^\n]+", s)])

指纹:

[
    ["milk", "eggs", "peanut butter", "oatmeal"],
    ["butter", "pancake mix", "maple syrup"],
    ["dog treats", "milk", "milk"],
]

评论

1赞 MJP 9/6/2023
感谢您的回复。我一直在尝试在我的代码中加入更多的正则表达式,只是为了更熟悉它,但似乎它在这里弊大于利。
0赞 C.Nivs 9/14/2023
@MJP,如果你把它作为一种练习,那完全没问题。在这种情况下,我会接受这个答案,它更符合您想要实现的目标