python中正则表达式
- 正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的
如果想查找对应规则的字符串,就可以用正则表达式
python中要使用正则表达式需使用re模块,它是正则表达式在python中的封装
1.匹配的方式:match、search、findall
1.1 match 表示: 从开始的位置进行匹配,即从第一个字符开始匹配,第一个没有匹配到,则整个就不会匹配到
- # 匹配特定的字符串 "abc"
- import re
- re_pattern = r'abc'#写匹配规则式时,要加上转意字符r
- res = re.match(re_pattern, "abwofowpqfowfjowefjiwoefabcowof")
- # 从 "wofowpqfowfjowefjiwoefabcowof" 这个字符串当中匹配是否 有 re_pattern
- # match 表示: 从开始的位置进行匹配,即从第一个字符开始匹配,第一个没有匹配到,则整个就不会匹配到
- print(res)
1.2search 全文匹配,如果表达式有多处可以匹配到,只会返回第一个匹配到的结果
- # search, 全文匹配,如果表达式有多处可以匹配到,只会返回第一个匹配到的结果
- res = re.search(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
- print(res)
1.3findall 全部匹配,如果表达式有多处可以匹配到,结果也会返回多个
- # findall, 全部匹配,如果表达式有多处可以匹配到,结果也会返回多个
- res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.语法
2.1 [abc] 匹配中括号中的任意一个字符
- # [abc], 匹配中括号中的任意一个字符
- re_pattern = r'[abc]',
- res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.2 .匹配任意一个字符串 除了 \n
- # . 匹配任意一个字符
- re_pattern = r'.',
- res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.3 \d 匹配数字,相当于[0-9]
- # \d 匹配数字 data,相当于[0-9]
- re_pattern = r'\d'
- res = re.findall(re_pattern, "a123bcwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.4 \D 匹配非数字
- # \D 匹配非数字 data
- re_pattern = r'\D'
- res = re.findall(re_pattern, "a@123bcwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.5 \w 匹配字母、数字、下划线 相当于[A-Za-z0-9_]
- # \w 匹配字母,数字,下划线
- re_pattern = r'\w'
- res = re.findall(re_pattern, "a@_123bcwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.6 \W 反向的, 非匹配字母,数字,下划线
2.7{}匹配花括号当中次数,一般要和其他的规则配合使用
- # 匹配花括号当中的数字次, 匹配几次,
- re_pattern = r'\d{2}'
- res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.8 {2, } 匹配至少 2 次
- # {2, } 匹配至少 2 次
- # TODO: 正则表达式当中,千万不要手残,空格不能随便打
- # 贪婪模式, python 当中
- re_pattern = r'\w{2,}'
- res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.9 {,2} 匹配最多 2 次
- # {,2} 匹配最多 2 次
- re_pattern = r'\w{,2}'
- res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
- print(res)
2.10 {2,4} 匹配 2 -4 次,最少匹配2,最多匹配4次
- # {2,4} 匹配 2 -4 次,最少匹配2,最多匹配4次
- re_pattern = r'\w{2,4}'
- res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
- print(res)
例子:匹配手机号码
- # 如何去匹配一个手机号码
- # re_pattern = r'1[35789]\d{9}'
- # res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
- # print(res)
2.11 *匹配0次或者任意次,通配符
- # # * 匹配 0 次或者任意次, 通配符,
- # re_pattern = r'\d*'
- # res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
- # print(res)
2.12 + 匹配1次或者任意次数,通配符
- # + 匹配 1 次或者任意次, 通配符,
- # re_pattern = r'\d+'
- # res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
- # print(res)
2.13 ? 匹配 0 次或者 1 次,非贪婪模式
- # ? 匹配 0 次或者 1 次
- re_pattern = r'\d?'
- res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
- print(res)
2.14 ^开头
- # ^ 开头
- re_pattern = r'^\d'
- res = re.findall(re_pattern, "1aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
- print(res)
2.15 $结尾
- # # $结尾
- # re_pattern = r'\d*$'
- # res = re.findall(re_pattern, "jiwoefabcowof3434")
- # print(res)
2.16组,findall中是用括号表示
search中用.group()表示
- # # 组,如果你要匹配的内容,显示出来不包含首位的字符,可以加上括号
- re_pattern = r'#(.*?)#'
- res = re.findall(re_pattern, mystr)
- print(res)
3.替换 re.sub()
- # # 替换 re.sub() 替换操作(正则表达式,替换成的字符串,被替换的字符串)
- # mystr = re.sub(re_pattern, 'me123', mystr, 1)
python中正则表达式的更多相关文章
- python 中 正则表达式 的应用
python 中 正则表达式 的应用 最近作业中出现了正则表达式,顺便学习了一下. python比较厉害的一点就是自带对正则表达式的支持,用起来很方便 正则表达式 首先介绍一下什么是正则表达式. 正则 ...
- 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反
一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...
- python中正则表达式 re.findall 用法
在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 其中,re.findall() 函数可以遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表. 在python源代码中 ...
- python中正则表达式re模块详解
正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索,替换,匹配验证都不在话下. 当然,对于爬虫来说,有了它,从HTML里提取想要的信息就非常方便了. 先看一下常用的匹配 ...
- python中正则表达式在中文字符串匹配时的坑
之前一直有使用python 正则表达式来做中文字符串或者中英文数字混合的字符串的匹配,发现有不少情况下会匹配失灵或者结果混乱,并且在不同操作系统上匹配结果也不一致,查了很久都不知道是什么原因.今天终于 ...
- js中正则表达式与Python中正则表达式的区别
今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中. python中的正则提取: import re str = ...
- Python中正则表达式讲解
正则表达式是匹配字符串的强大武器,它的核心思想是给字符串定义规则,凡是符合规则的字符串就是匹配了,否则就是不合法的.在介绍Python的用法之前,我们先讲解一下正则表达式的规则,然后再介绍在Pytho ...
- 关于Python中正则表达式的反斜杠问题
之前总是搞不明白正则表达式中的反斜杠的问题.今天经过查阅资料终于搞明白了. 其中最重要的一点就是Python自己的字符串中定义的反斜杠也是转义字符,而正则表达式中的反斜杠也是转义字符,所以正则表达式中 ...
- 第11.21节 Python 中正则表达式的其他扩展功能
一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...
随机推荐
- Ubuntu 18.04 LTS IP 地址设置
和之前的版本不太一样, Ubuntu 18.04 的 ip地址设置是用netplan管理的 配置文件在: /etc/netplan/50-cloud-init.yaml 示例文件如下: # T ...
- json针对list map set 应用
package JSONtest; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; im ...
- 二叉树、平衡二叉树、B-Tree、B+Tree 说明
背景 一般说MySQL的索引,都清楚其索引主要以B+树为主,此外还有Hash.RTree.FullText.本文简要说明一下MySQL的B+Tree索引,以及和其相关的二叉树.平衡二叉树.B-Tree ...
- LuoguP1286 两数之和
题面概括 将n个数两两相加得到n*(n-1)/2个和,给出这些和,求所有原数方案 n<=500 LuoguP1286 题解 此题原题是 n<10, 没啥可做的 先将 \(n*(n-1)/2 ...
- STM32入门系列-STM32最小系统介绍
STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...
- [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)
题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...
- QQ 邮箱日历提醒
偶然发现 QQ 邮箱有日历的功能,而且可以设置农历并且每年邮件 + 短信 + 微信提醒.这下重要的日子(eg:生日...)就不会忘记啦! 1.找到日历 2.历史提醒 3.新建时间 4.设置时间 5.勾 ...
- 数据库本地data source
数据源表示数据库所在设备的ip地址或名称,基本上有以下几种写方法 data source = (local) data source = "127.0.0.1" data sour ...
- 【kotlin】adapterPosition方法返回-1 无法获取位置
在学习使用RecyclerView时 对Adapter的几个主要方法进行重写 通过使用书中的例子 在onCreateViewHolder中使用 viewHolder.itemView.setOnCli ...
- zookeeper单机/集群安装和使用
简书原文地址:https://www.jianshu.com/p/88194fde9a07 或者关注我的公众号"进阶者euj" 前提是本机有jdk 一.单机安装 1.去官网下载zo ...