regex 匹配逗号分隔值列表的正则表达式[已关闭]

bpsygsoo  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(114)

2天前关闭。
社区在2天前审查了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question

问题:

假设我有一个由逗号分隔的项目字符串,如下所示:

items = "jim, bill, bob, mint chocolate chip, 42, 267.69, false, null, blah blah BLAH"

我想要一个正则表达式,我可以用它来获取逗号分隔列表中的每一项,并将它们放在一个常规Python列表中,如下所示:

['jim', 'bill', 'bob', 'mint chocolate chip', '42', '267.69' 'false', 'null', 'blah blah BLAH']

对于正则表达式匹配的每一项内容应该没有限制,这意味着除了逗号(,)之外,您应该能够拥有基本上任何内容,列表也可以包含任意数量的项。
下面是我现有的正则表达式(它没有按预期工作):

(?P<item>[^,]*)(?:,[ ]?|$)

下面是一个示例,说明它是如何无法按预期工作的:

import re

regex = re.compile(r'(?P<item>[^,]*)(?:, ?|$)')
items = "jim, bill, bob, mint chocolate chip, 42, 267.69, false, null, blah blah BLAH"

print(regex.findall(items))
# outputs ['jim', 'bill', 'bob', 'mint chocolate chip', '42', '267.69', 'false', 'null', 'blah blah BLAH', '']

问题:

1.为什么在列表的末尾有一个空字符串,我如何修改正则表达式来避免它?
1.我希望正则表达式使用^$匹配字符串的开头和结尾,但是如果我将正则表达式更改为^(?P<item>[^,]*)(?:, ?|$),它将只返回['jim']re.findall,我如何修改正则表达式以匹配字符串的开头和结尾?
编辑:这个问题不是"我应该用正则表达式来做这个",而是"我如何用正则表达式来做这个"。我完全意识到使用正则表达式可能不是最好的方法。

toe95027

toe950271#

我会把你的正则表达式改成:(?P<item>[^,]+)(?:[, ]*)将匹配项从*更改为+意味着不匹配末尾的空字符串,将分隔符从?更改为*意味着删除空格。

相关问题