re模块使得Python拥有全部的正则表达式功能,使用时要先导入re模块。
1、findall()方法,在字符串中查找所有的子串,把匹配结果以列表的格式返回,若无匹配的则返回空列表。
import re
# re.findall(要匹配的子串,字符串)
a = "python123123145java"
print(re.findall("1", a))
2、match()方法,匹配字符串的开始位置,只能匹配一个,找到符合规则的就返回,如果开始位置没有符合的则返回None,有的话返回一个对象,若需要返回匹配的字符串用re.match().group()
import re
a = "python123123java"
print(re.match('python',a))
print(re.match('python',a).group())
3、search()方法,扫描整个字符,返回搜索到的第一个,匹配成功时返回一个匹配对象(这个对象包含了我们匹配的对象),若需要返回匹配的字符串用re.search().group(),没有符合规则的返回None,也是只能匹配到一个,找到符合规则的就返回,不会一直往后找。
import re
a = "python123123java"
print(re.search('python',a).group())
4、元字符
(1)单字符匹配
.:匹配任意一个字符(除了\n)
[]:匹配[]中列举的字符
\d:匹配数字,即0-9
\D:匹配非数字,即不是数字
\s:匹配空白,即空格,tab键
\S:匹配非空白
\w:匹配单词符,即a-z、A-Z、0-9、_、包含中文等字符(匹配的是非标点符号)
\W:匹配非单词字符(匹配的是标点符号)
(2)代表数量的元字符
*:匹配前一个字符出现0次或者无限次,即可有可无
+:匹配前一个字符出现1次或者无限次,即至少有1次
?:匹配前一个字符出现0次或者1次,即要么有1次,要么没有
{m}:匹配前一个字符出现m次
{m,}:匹配前一个字符至少出现m次
{m,n}:匹配前一个字符出现从m到n次
(3)代表边界的元字符
^:匹配字符串开头
$:匹配字符串结尾
\b:匹配一个单词的边界
\B:匹配非单词边界
(4)分组匹配
|:匹配左边任意一个表达式
(ab):将括号中的字符作为一个分组
5、贪婪和非贪婪模式
正则默认都是用贪婪模式去匹配数据的,就是尽可能多的匹配符合要求的数据,在非贪婪模式始终找最短匹配。
在编程中默认都是贪婪模式,在量词后面直接加上一个问号?就是非贪婪模式。
import re
a='aa2323'
print(re.match(r'aa\d+',a).group()) #会尽可能多的去匹配\d
# aa2323
print(re.match(r'aa\d+?',a).group()) #尽可能少的去匹配\d
# aa2
6、用正则对登录的用户名密码判断
输入用户名和密码
1.用户名必须是8--12位
2.用户名必须是字母开头
3.用户名不能有中文
4.密码不能和用户名相同
5.密码必须有至少8位
6.密码不能超过16位
import re
username = input("用户名:")
password = input("密码:")
a = r'^[A-Za-z][A-Za-z0-9]{7,11}$'
b = r'^\d+$'
if re.match(a , username) : # 用户名必须是8--12位,用户名必须是字母开头,用户名不能有中文
if re.match(b,password) and password!=username: # 密码不能有中文,密码不能和用户名相同,密码必须有至少8位,密码不能超过16位
if 8<=len(password)<=16:
print('登录成功')
else:
print('密码输入长度不满足')
else:
print('密码输入不全是数字或密码和用户名不能相同')
else:
print('用户名输入不正确')