正则表达式是编程中常用的技术手段,普通的字符串操作会使得程序难以复用,而使用正则表达式会极大的提高复用率。
- 匹配符
要用字符来匹配字符,定义一些基本的的匹配符是不可避免的:- \d可以匹配一个数字,\w可以匹配一个字母或者数字,\s 表示匹配空格或者Tab等空白符
- . 可以匹配任意字符
- 对于变长匹配,* 表示任意个字符(包括0),+ 表示最少一个字符,? 表示0或者1个字符,{n} 表示匹配n个字符,{n,m} 表示匹配n-m个字符
例题1. 请分析下 \d{3}\s+\d{3,8} 所表示的含义?
解:
\d{3}表示三个数字
\s+ 表示最少一个空格
\d{3,8}表示3-8位的数字
答: 这个正则表达式表示的是一个用空格隔开的电话号码。 - 精确匹配
上述匹配符有一个致命的问题,比如如果我想匹配一个用空格或者 - 分开的电话号码?似乎难以解决这个问题,如果写两个正则表达式十分不优雅,所以我们又引入了以下几个操作符:- []表示了范围,如 [0-9a-zA-Z\_] 匹配一个数字、字母或者下划线
- A|B 表示匹配A或者B,| 表示或者匹配,如 (P|p)ython 匹配Python或者python
- ^ 表示行的开头,如 **^* 表示以数字开头
- $ 表示行的结尾,如 $ 表示以数字结尾
- []表示了范围,如 [0-9a-zA-Z\_] 匹配一个数字、字母或者下划线
注意事项
正则表达式使用的是贪婪匹配,也就是尽可能多的匹配尽量多的字符例题2. 请写出下面程序的结果:
re.match(r'^(\d+?)(0)$', '102300').groups() 答:('102300', '')
例题3:请写出匹配102300最后一个0的正则表达式?
答:^(\d+?)0$
也就是说,对于 \d+ 这种贪婪匹配,加上 ? 就会变成非贪婪匹配(尽可能少匹配)