gpt4 book ai didi

python - re.findall 正则表达式在 Python 中分组失败

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:56 24 4
gpt4 key购买 nike

我正在编写一个使用正则表达式查找电子邮件地址的 Python 程序。每当我尝试使用圆括号进行分组时,re.findall 函数都会给出错误的输出。谁能指出错误/提出替代解决方案?

这里有两段代码来解释——

pat = "[\w]+[ ]*@[ ]*[\w]+.[\w]+"
re.findall(pat, 'abc@cs.stansoft.edu.com .rtrt.. myacc@gmail.com ')

给出输出

['abc@cs.stansoft', 'myacc@gmail.com']

但是,如果我在此正则表达式中使用分组并将代码修改为

pat = "[\w]+[ ]*@[ ]*[\w]+(.[\w]+)*"
re.findall(pat, 'abc@cs.stansoft.edu.com .rtrt.. myacc@gmail.com ')

输出是

['.com', '.com']

为了确认正则表达式的正确性,我在 http://regexpal.com/ 中尝试了这个特定的正则表达式(在第二个示例中)使用相同的输入字符串,并且两个电子邮件地址都匹配成功。

最佳答案

在 Python 中,re.findall 只有在没有分组的情况下才返回整个匹配项,如果有分组则返回分组。要解决这个问题,您应该使用非捕获组 (?:...)。在这种情况下:

pat = "[\w.]+ *@ *\w+(?:\.\w+)*"
re.findall(pat, 'abc@cs.stansoft.edu.com .rtrt.. myacc@gmail.com ')

关于python - re.findall 正则表达式在 Python 中分组失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748289/

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