1.匹配单个字符
语法:
ret = re.match(r"速度与激情\d", “速度与激情5”)
1.使用反斜杠d 可以使用户输入任意的一位数字,当用户需要查找速度与激情55时
\d\d两个反斜杠d就可以解决
2.也可以使用 [1234567] ,这样用户输入的值就只能在这里面匹配了
或输入 [1-7],与上述一致,也是1到7数字
或输入 [1-36-8],即用户输入1到3,6到8符合规则
或输入 [1-8abcd] 即用户输入 1到8数字或者 a-d字母 符合规则
如果[] 中没有 9,用户输入了9 那么没有返回值,即用户输入的值,不符合要求
3.\w 匹配 0-9, a-z ,A-Z,中文,都可以,即字母、数字、下划线、汉字
4.\s 匹配空白字符 即:空格,Tab键
5.\D 匹配非数字, \S 匹配非空白 ,\W 匹配非单词 也就是与小写的自己相反
6. . 点 匹配任意字符,除\n ,最为宽广,. 意味只能输入.
注意:以上用法,只能匹配一个字符
# 匹配1-2位任意数字
ret = re.match(r"\d{1,2}", "22").group()
# 匹配3位数字, 少一位都不行
ret = re.match(r"\d{3}", "666").group()
2.匹配多个字符
re.match(r"速度与激情\d{1,2}", “速度与激情5”).group()
- \d{1,2}: 如此限制,用户可以输入1-2位任意数字
即:re.match(r"速度与激情\d{1,2}", “速度与激情5”).group() 成立
re.match(r"速度与激情\d{1,2}", “速度与激情55”).group() 成立 - re.match(r"\d{11}", “12345678901”).group()
即:限制输入 11位数字 ,多和少都不行 - ?的作用:
re.match(r"021-?\d{8}", “02112345678”).group()
输出: ‘02112345678’
re.match(r"021-?\d{8}", “021-12345678”).group()
输出: ‘021-12345678’
即: ?匹配前一个字符出现1次或者0次,要么有1次,要么没有,也不允许多
4.* 的作用:*
即:匹配前一个字符出现0次 或者无限次,即可有可无
5.+ 的作用:
即:匹配前一个字符出现1次或者无限次,即至少有一次
注意:最重要的是,{} 一定要基于前面的条件,若前面无条件,则不能使用
大括号{} 前的条件是什么就要满足 比如\d{} 即满足连续的数字
A{3},即连续的3个大A
3.匹配开头结尾
注意:match()方法,自带匹配判断 开头,但是其没有判断结尾
- $ 作用:
匹配字符串结尾 - ^作用:
匹配字符串结尾
规范写法:ret = re.match(r"^[a-zA-Z_][a-zA-Z_0-9]*$", name)
前后都需要加上 ^,$
4.需要匹配163邮箱的格式
1.在@前 有4-20位
2.后缀统一 @163.com
re.match(r"^[a-zA-Z_0-9]{4,20}@163\.com$", email)
问题:点 . 在使用中意味随意任何字符都行,除\n 则:laowang@163Acom 符合规范
此时使用 . 可以使 用户只能输入 .点 ,达到需求
注意:
如果在正则表达式中,需要用到 . ? 等,仅仅需要在他们前面添加一个 反斜杠\ 进行转义
5.分组等
1. | 的作用
ret = re.match(r"^[a-zA-Z_0-9]{4,20}@163|135\.com$", "laowang@163.com")
输出:laowang@163
注意:不会输出 .com
ret = re.match(r"^[a-zA-Z_0-9]{4,20}@(163|126)\.com$", content)
添加括号(A|B|C)。。。就可以识别 A,B,C
2. (ab)的作用
将括号中字符作为一个分组
可以使用 返回值.group(1) 取到 括号里的值,但是,这个值是基于 正则匹配成功的值
例:laowang@163.com ,则返回值.group(1) 为163
例:laowang@126.com, 则返回值.group(1) 为126
同样,可以括号多个来取不同的值
例:ret = re.match(r"^([a-zA-Z_0-9]{4,20})@(163|126)\.com$", "laowang@126.com")
在[] 前加括号,返回值.group(1) 就是 laowang,返回值.group(2) 为126
3. \num的作用
引用分组num匹配到的字符串
ret = re.match(r"<(\w*)>.*</\1>", "<h2>hahaha</h2>")
print(ret.group())
输出:<h2>hahaha</h2>
<(\w*)> 匹配 <h2>,
.* 匹配 hahaha,
</\1> 匹配 </h2>
提示:\1的作用是:将第一个括号里的值 与其一致
同理:
ret =re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<body><h2>hahaha</h2></body>")
print(ret.group())
输出:<body><h2>hahaha</h2></body>
两两对应。
6.re高级用法
1.search方法作用
查找客户输入的第一个需要的值
ret = re.search(r"\d+", “阅读:99999,点赞1000”)
print(ret.group())
输出:99999
提示:search方法 找到第一个值就会返回
可否变成 match方法,只要在ret = re.search(r"^\d+", “阅读:99999,点赞1000”)
开头加上 ^ 从头开始查找,但是程序会挂。
2.findall作用
ret = re.findall(r"\d+", “阅读99999,点赞1000”)
print(ret)
输出:[‘99999’, ‘1000’] 是一个列表
注意:不能再使用 group() 方法显示
3.sub将匹配到的数据替换
ret = re.sub(r"\d+",“1024”, “阅读99999,点赞1000,你好”)
print(ret)
输出:阅读1024,点赞1024,你好 —是一个字符串
把符合要求的地方替换为1024,并且返回整个字符串
扩展:
ret = re.sub(r"\d+", add, “点赞数 = 99”)
sub方法可以 使参数里面 添加函数引用
4.split 根据匹配进行切割字符串,并返回一个列表
ret = re.split(r":| ", "info:zhalao 33 1000 shandong:2")
print(ret)
输出:['info', 'zhalao', '33', '1000', 'shandong', '2']---返回一个列表
使用 冒号:或者 空格 切割。
博主萌新,不足之处望各位之处
此篇文章基于python re模块