怎么看用户输入的内容是我所需要的规范,比如用户注册----正则表达式
在python中需要正则表达式对字符串进行匹配时,可以使用一个模块,re
检测需要处理的字符串是不是符合我的正则表达式,如果有返回值说明满足,并且会形成一个新的对象。那如果不满足呢?
不满足时没有返回值,那么我怎么样能让 h和H都能符合规范,怎么办?
h和H都满足我的正则表达式。
代替一个数字: \d
如果把返回值赋值给一个变量,怎么提取出来?—group
注意:一个\d等价于一位数字。
\d 其实等价于0-9,但是如果我们想加个范围呢?用中括号
也可以写成[1-8]
如果是123678呢?
中括号中不止可以写数字,还可以写字母
也可以加入大写字母
总结一下:
上面都是单个字符,如果我要匹配多个字符,比如两位的数字12怎么办?两个\d\d?我们来实现一下:
两个是可以识别两位数,但是他不能识别一位数了。那应该怎么办,加一个{},表示前面的字符的位数。
如果想要识别三位数呢?
如果需要识别固定的位数,比如11位的电话号码?
\d{11} 表示必须是连续的11位数字。
但是有的电话号码比如座机,会有-。但是时有时没有,怎么识别呢?加个问号。
完善一下:
. 可以匹配字符,*代表任意个,那么 两个加一起,应该是表示任意个字符。
可以看出,.*表示的是任意个字符,但是不包括换行。
总结:
练习:判断列表中的变量名是否符合要求:
变量名:包括数字字母和下划线,且不能以数字开头。
import re
def main():
names = ['age', 'age1', 'a1ge', '_age1', '_1g_e', 'age!', 'a#1ge', '___1_']
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()
可以看出效果并不好,那么倒数第二个和第三个为什么不对呢?很明显是没有检验到最后一位。加一个$
import re
def main():
names = ['age', 'age1', 'a1ge', '_age1', '_1g_e', 'age!', 'a#1ge', '___1_']
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()
练习:匹配出163的邮箱地址,并且@符号之前有4-20位数字字母和下划线。例如hello@163.com
import re
def main():
while True:
email = input('请输入一个163邮箱地址:')
ret =re.match(r'[a-zA-Z0-9_]{4,20}@163\.com$', email)
if ret:
print('%s 符合要求----' % email)
else:
print('%s 不符合要求---' % email)
if __name__ == '__main__':
main()
如果既想识别163邮箱,也想识别126邮箱
加了括号之后,就可以选择性的取值了。
这里要注意,从1开始取。
思考一个问题,如果我要识别
有相同的部分,那么可以怎么表示?
但是如果小括号的分组很多,用123编码容易乱,那么可以起个名字吗啊?
这里的P要大写。
总结: