- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
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
,我如何修改正则表达式以匹配字符串的开头和结尾?
编辑:这个问题不是"我应该用正则表达式来做这个",而是"我如何用正则表达式来做这个"。我完全意识到使用正则表达式可能不是最好的方法。
1条答案
按热度按时间toe950271#
我会把你的正则表达式改成:
(?P<item>[^,]+)(?:[, ]*)
将匹配项从*
更改为+
意味着不匹配末尾的空字符串,将分隔符从?
更改为*
意味着删除空格。