gpt4 book ai didi

python - findall() 返回整个字符串而不是列表

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:42 26 4
gpt4 key购买 nike

我正在尝试在 Python 中使用正则表达式来匹配字符串:

pattern = re.compile(r"(\d+?\,\s[a-zA-Z]+?\,\s\d{4}\-\d{2}\-\d{2})")
string = '[ 1234, jack, 1987-09-02]'
ret = pattern.findall(string)

这将返回整个字符串作为列表元素:['1234, jack ,1987-09-02']

但我试图获取一个列表,其中每个匹配项作为一个元素:['1234', ' jack ', '1987-09-02']

我知道“+”是贪婪的,但我添加了“?”

最佳答案

您的模式与方括号内的全部内容匹配,而您似乎只想获取由单词和连字符组成的字符 block 。

使用

pattern = re.compile(r"[\w-]+")

请参阅regex demo

请参阅IDEONE demo :

import re
pattern = re.compile(r"[\w-]+")
string = '[ 1234, jack, 1987-09-02]'
ret = pattern.findall(string)
print(ret)
# => ['1234', 'jack', '1987-09-02']

模式详细信息:[\w-]是与单词字符(数字、字母或下划线)匹配一次或多次的字符类(由于 + 量词)。

替代解决方案:匹配可选空格,然后匹配并捕获所有非逗号符号

pattern = re.compile(r"\s*([^[\],]+)")

查看另一个regexIDEONE演示。 re.findall仅将捕获的值返回到组 1+,因此仅返回使用 (...) 捕获的值(即,将返回除 ][, 之外的所有 1+ 个字符)。

关于python - findall() 返回整个字符串而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37081877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com