M04015: 邮箱验证
strings, RE, http://cs101.openjudge.cn/practice/04015
POJ 注册的时候需要用户输入邮箱,验证邮箱的规则包括: 1)有且仅有一个'@'符号 2)'@'和'.'不能出现在字符串的首和尾 3)'@'之后至少要有一个'.',并且'@'不能和'.'直接相连 满足以上3条的字符串为合法邮箱,否则不合法, 编写程序验证输入是否合法
输入
输入包含若干行,每一行为一个代验证的邮箱地址,长度小于100
输出
每一行输入对应一行输出 如果验证合法,输出 YES 如果验证非法:输出 NO
样例输入
.a@b.com
pku@edu.cn
cs101@gmail.com
cs101@gmail样例输出
NO
YES
YES
NO这题目输入没有明确结束,需要套在try ... except里面。测试时候,需要模拟输入结束,看你是window还是mac。If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
while True:
try:
s = input()
except EOFError:
break
if s.count('@') != 1:
print("NO"); continue
#if (s[0]=='@' or s[-1]=='@' or s[0]=='.' or s[-1]=='.'):
if (s[0] in {'@', '.'} or s[-1] in {'@', '.'}):
print("NO"); continue
if (s.find("@.")!=-1 or s.find(".@")!=-1):
print("NO"); continue
p = s.find("@");
q = s.find(".", p+1);
'''
if (q==-1):
print("NO")
else:
print("YES")
'''
print('NO' if q==-1 else 'YES')一次性读入,使用正则表达式。
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
import sys, re
reg = r'^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$'
data = sys.stdin.read().strip().splitlines()
for s in data:
print('YES' if re.match(reg, s) else 'NO')唐浴歌经济学院1900015516
题目给的要求是[^@.],也就是说正常字段只需要不是“@”和“.”即可。以前遇到的要求是:正常字段只能是大小写字母或“-”,所以也试了试[\w-]。虽然regulation需要前后match,也就是说前面加一个“^”,后面加一个“$”, 但 是.match函数本身就是从头开始检索的,所以“^”可以删去。
# https://www.tutorialspoint.com/python/python_reg_expressions.htm
# https://www.geeksforgeeks.org/python-regex/
import re
while True:
try:
s = input()
reg = r'^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$'
print('YES' if re.match(reg, s) else 'NO')
except EOFError:
break^:匹配字符串的开始。 [\w-]+:匹配用户名部分的第一个子部分,允许字母、数字、下划线和连字符,至少有一个字符。 (.[\w-]+)*:匹配用户名部分的其余子部分,每个子部分由点分隔,可以有零个或多个这样的子部分。 @:匹配单个 @ 符号。 [\w-]+:匹配域名的第一部分,允许字母、数字、下划线和连字符,至少有一个字符。 (.[\w-]+)+:匹配域名的后续部分,每个部分由点分隔,至少有一个这样的部分,并且每个部分都至少包含一个字符。 $:匹配字符串的结尾,确保整个字符串都被匹配到结尾,不允许多余的字符。
# https://www.tutorialspoint.com/python/python_reg_expressions.htm
# https://www.geeksforgeeks.org/python-regex/
import re
while True:
try:
s = input()
reg = r'^[^@\.]+(\.[^@\.]+)*@[^@\.]+(\.[^@\.]+)+$'
print('YES' if re.match(reg, s) else 'NO')
except EOFError:
break正则表达式遵循以下规则:
^:匹配字符串的开始。
[^@\.]+:匹配不包含 @ 和 . 的字符序列,确保用户名部分不以 @ 或 . 开始。(\.[^@\.]+)*:允许用户名部分有多个子部分,每个子部分由点分隔。@:匹配单个 @ 符号。[^@\.]+:匹配域名的第一部分,确保其不包含 @ 和 .。(\.[^@\.]+)+:匹配域名的后续部分,每个部分必须至少包含一个非 @ 和 . 的字符,并且必须至少有一个这样的部分。$:确保整个字符串都被匹配到结尾,不允许多余的字符。
Regular expression相关题目:
04015: 邮箱验证,24834:通配符匹配,
CF58A. Chat room, https://codeforces.com/problemset/problem/58/A
LeetCode 65. 有效数字,https://leetcode.cn/problems/valid-number/description/
Regulex 正则表达式在线测试工具,https://regex101.com
Regulex/Regex101:提供了在线测试正则表达式的平台,可以帮助用户构建和调试正则表达式。Regex101, https://regex101.com 是一个非常流行的在线工具,支持多种正则表达式语法(包括Python),并提供详细的解释和分步调试功能。
学习资源:对于想要深入了解Python正则表达式的开发者,可以参考CSDN上的这篇文章, https://blog.csdn.net/weixin_43347550/article/details/105158003,它详细介绍了Python中正则表达式的使用方法,包括如何使用`re`模块进行匹配、搜索、分割和替换操作。