Python findall正则表达式函数只捕获一些文本

时间:2017-08-13 12:47:52

标签: python regex

我仍然是Regex的新手,我一直在尝试在我的Python程序中实施Gmail验证算法。

这是我的正则表达式

mail_address = "hello.89@gmail.com"
result = re.findall(r'\w+[\w.]+(@gmail.com){1}', mail_address)
print (str(result))

第一个字符必须是字母数字(\ w +),从那里它捕获每组字符([\ w。] +),然后只有一个实例of @ gmail.com

这就是它打印的内容:

['@gmail.com']

但它应该打印

['hello.89@gmail.com']

我做错了什么?

编辑:这是我选择的正则表达式:

\A(\w+[\w.]+@gmail\.com)\Z

3 个答案:

答案 0 :(得分:3)

只需改变括号,使其包含所有您想要的输出:

result = re.findall(r'(\w+[\w.]+@gmail.com)', mail_address)

我略微改变了你的表达,因为gmail.com部分现在只是一个字符串。此外,您不需要将结果转换为字符串加上您不需要重复一次组。
话虽这么说,但最终你还是得到了:

import re
mail_address = "hello.89@gmail.com"
result = re.findall(r'(\w+[\w.]+@gmail.com)', mail_address)
print (result)
# ['hello.89@gmail.com']

答案 1 :(得分:2)

如Jan所述,问题出现在括号中。但你的正则表达式也可以简化为:

result = re.findall(r'(\w+[\w.]+@gmail.com)', mail_address)

演示:https://regex101.com/r/Z5EGbZ/1

@ gmail.com 之后的量词无意义。

答案 2 :(得分:1)

这应该可以使用你的正则表达式

regex = r"\w+[\w.]+(@gmail.com){1}"

test_str = "hello.89@gmail.com"

matches = re.finditer(regex, test_str)

for matchNum, match in enumerate(matches):
    matchNum = matchNum + 1

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

检查online compiler