Python正则表达式re库的使用
指导思想:正则表达式只是一个工具,学会其中一种使用方法即可
1. ()和re.findall结合使用
({}{})中第一个大括号替换为.则表示匹配所有字符,替换为[]则表示匹配中括号内限定的字符; 第二个大括号替换为*则表示匹配长度为>=0,替换为+则表示匹配长度为>=1,替换为空则表示匹配长度为1 (.*)表示匹配任意长度的所有字符 ([0-9]*)表示匹配任意长度的数字 ([0-9,a-z])表示匹配长度为1的数字和小写字母 re.findall函数需要传入2个参数,第1个参数是正则表达式,第2个参数是要进行搜索的源字符串。 re.findall函数返回结果的数据类型为列表,列表中的第1个元素的数据类型为元祖。
示例代码如下:
import re if __name__ == "__main__": sourceStr = "11房5厅8卫" sourceStr2 = "a房b厅3卫" pattern_all = "(.*)房(.*)厅(.*)卫" pattern_number = "([0-9]*)房([0-9]*)厅([0-9]*)卫" pattern_numberAndLetter = "([0-9,a-z])房([0-9,a-z])厅([0-9,a-z])卫" print("正则表达式找出中间的字符:") result = re.findall(pattern_all, sourceStr) print(result,type(result),type(result[0])) print(re.findall(pattern_all,sourceStr2)) print("正则表达式找出中间的数字") print(re.findall(pattern_number,sourceStr)) print(re.findall(pattern_number,sourceStr2)) print("正则表达式找出中间的数字和字母") print(re.findall(pattern_numberAndLetter, sourceStr)) print(re.findall(pattern_numberAndLetter, sourceStr2))
上面一段代码的运行结果如下:
正则表达式找出中间的字符:
[('11', '5', '8')] <class 'list'> <class 'tuple'>
[('a', 'b', '3')]
正则表达式找出中间的数字
[('11', '5', '8')]
[]
正则表达式找出中间的数字和字母
[('1', '5', '8')]
[('a', 'b', '3')]
2. 正则表达式中的元字符
\s 用于匹配单个空格符,包括tab键和换行符; \S 用于匹配除单个空格符之外的所有字符; \d 用于匹配从0到9的数字; \w 用于匹配字母,数字或下划线字符; \W 用于匹配所有与\w不匹配的字符; . 用于匹配除换行符之外的所有字符。 例如上一节中的([0-9]*)与([\d]*)作用相同
3. ()和re.search结合使用
re.search函数需要传入2个参数,第1个参数是正则表达式,第2个参数是要进行搜索的源字符串。
re.search函数返回结果的数据类型是sre.SRE_Match对象,span=(3,9)是匹配结果的索引,从索引3开始,不包括索引9。
把re.search函数返回结果赋值给result,通过result.group函数获取匹配结果,result.group函数需要传入1个参数,参数的数据类型为无符号整型,参数为0时,为正则表达式匹配到的长句内容;参数为1时,为正则表达式匹配到的第1个小括号中的内容;参数为2时,为正则表达式匹配到的第2个小括号中的内容,依此类推。
示例代码如下:
import re if __name__ == "__main__": sourceStr = "户型:3室2厅2卫" pattern_all = "([\d]*)室(.)厅(.)卫" result = re.search(pattern_all,sourceStr) print(result) print(result.group(0)) print(result.group(1)) print(result.group(2)) print(result.group(3))
上面一段代码的运行结果如下:
<_sre.SRE_Match object; span=(3, 9), match='3室2厅2卫'>
3室2厅2卫
3
2
2
4 re.match的使用
re,match在实际应用中很少,不建议使用。
re.match能够匹配的前提是必须字符串索引0的位置能够匹配到。
import re if __name__ == "__main__": re1 = "hel." re2 = ".el" re3 = ".hel" re4 = "el" sourceStr = "hello" print(re.match(re1,sourceStr)) print(re.match(re2,sourceStr)) print(re.match(re3,sourceStr)) print(re.match(re3,sourceStr))
上面一段代码的运行结果如下:
<_sre.SRE_Match object; span=(0, 4), match='hell'>
<_sre.SRE_Match object; span=(0, 3), match='hel'>
None
None
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
4_2 最大公约数和最小公倍数
输入两个正整数m和n,求其最大公约数和最小公倍数 输入 34 8 输出 2 136 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); System.out.println(gcd(m, n) + " " + m * n / gcd(m, n)); } static int gcd(int a, int b) { while(b != 0) { int t = b; b = a % b; a = t; } return a; } }
- 下一篇
w2 有秒计时的数字时钟
题目内容: 这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成。但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,然后来做这个题目。 我们需要给时钟程序加上一个表示秒的Display,然后为Clock增加以下public的成员函数: public Clock(int hour, int minute, int second); 用hour, minute和second初始化时间。 public void tick(); “嘀嗒”一下,时间走1秒。 public String toString(); 返回一个String的值,以“hh:mm:ss“的形式表示当前时间。这里每个数值都占据两位,不足两位时补0。如“00:01:22"。注意其中的冒号是西文的,不是中文的。 提示:String.format()可以用和printf一样的方式来格式化一个字符串。 另外写一个Main类,它的main函数为下面的样子,注意,必须原封不动地作为Main的main函数: public static void main(String[] args) ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8