匹配结尾开头
import re
def main():
names = ["age","_age","loge","age1","a_age","age_1_","age!","a#123","______"]
for name in names:
ret = re.match(r"[a-zA-Z_][a-zA-Z0-9_]*",name)
if ret:
print ("变量名:%s 符合要求 . . .%s" % (name,ret.group()))
else:
print ("变量名: %s 不符合要求 . . ." % name)
if __name__ == '__main__':
main()
可以看到age!,a#123满足要求,按照正则逻辑应该是不满足的。因为match判头不判尾 到age就结束了 后面自然打出来,那么怎么样才能判头判尾。
字符 | 功能 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
$加上就ok了
ret = re.match(r"[a-zA-Z_][a-zA-Z0-9_]*$",name)
import re
def main():
names = ["age","_age","loge","age1","a_age","age_1_","age!","a#123","______"]
for name in names:
ret = re.match(r"[a-zA-Z_][a-zA-Z0-9_]*$",name)
if ret:
print ("变量名:%s 符合要求 . . .%s" % (name,ret.group()))
else:
print ("变量名: %s 不符合要求 . . ." % name)
if __name__ == '__main__':
main()
简单判断email,转义
判断163邮箱地址
代码:
import re
def main():
email = input("请输入一个邮箱地址:")
ret = re.match(r"[a-zA-Z_0-9]{4,20}@163.com",email)
if ret:
print ("%s符合要求. . . ." % email)
else:
print ("%s不符合要求. . . ." % email)
if __name__ == '__main__':
main()
注意match判头不判尾,所以在com后面多加也会符合要求
注意.com中的.
如果理解成匹配单个字符,那么1234@163Acom也是可以的
所以这个时候需要$判尾,所以这时候需要把.转义
\ . 前面加上反斜杠就是转义
分组
字符 | 功能 |
---|---|
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?p) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
判断163邮箱地址和126地址(分组可以用来取数据)
把163和126地址分组 |相当于or的作用
ret = re.match(r"[a-zA-Z_0-9]{4,20}@(163|126).com",email)
ret.group(1) //输出将是第一个分组里面的数据 这个示例是163或者126
多加几个分组
ret = re.match(r"([a-zA-Z_0-9]){4,20}@(163|126).com",email)
ret.group(1) //输出将是第一个分组里面的数据 这个示例是[a-zA-Z_0-9]
ret.group(2) //输出将是第一个分组里面的数据 这个示例是163或者126