我仍然是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
答案 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)
@ 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()))