day23 Pythonpython 本文re模块
re模块用于对python的正则表达式的操作。
字符:
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
次数:
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
一、普通字符:
. 通配符一个.只匹配一个字符
import re print(re.findall("abcd","asdcabcd")) print(re.findall("a..d","avsdcabcd")) 结果: ['abcd'] ['avsd', 'abcd']
^ 以什么开头
import re print(re.findall("abcd","asdcabcd")) print(re.findall("^avd","avddddcaavddbcd")) 结果: ['abcd'] ['avd']
$ 以什么结尾
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd$","avddddcaavddbcavd")) 结果: ['abcd'] ['avd']
* 代表匹配*前面的字符 重复0到无穷次
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd*","avddddcaavddbcavavd")) 结果: ['abcd'] ['avdddd', 'avdd', 'av', 'avd']
+ 代表匹配+前面的字符 重复1到无穷次
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd+","avddddcaavddbcavavd")) 结果: ['abcd'] ['avdddd', 'avdd', 'avd']
*和+属于贪婪匹配
? 代表匹配?前面的字符的0次或者是1次
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd?","avddddcaavddbcavavd")) 结果: ['abcd'] ['avd', 'avd', 'av', 'avd']
{}可以指定重复几次
{0,} 代表重复{}前面字符的0到无穷次,相当于*
{1,} 代表重复{}前面字符的1到无穷次,相当于+
{0,1}代表重复{}前面字符的0到1次,相当于?
{6}代表重复{}前面字符的6次
{1,3}代表重复{}前面字符的1次到3次
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd{3}","avddddcaavddbcavavd")) print(re.findall("avd{3}","avddddcaavddbcavavd")) print(re.findall("avd{2,4}","avddddcaavddbcavavd")) print(re.findall("avd{0}","avddddcaavddbcavavd")) print(re.findall("avd{7}","avddddcaavddbcavavd")) 结果: ['abcd'] ['avddd'] ['avddd'] ['avdddd', 'avdd'] ['av', 'av', 'av', 'av'] []
惰性匹配*? 只要匹配出*前面的字符的0次就不匹配了
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd*?","avddddcaavddbcavavd")) 结果: ['abcd'] ['av', 'av', 'av', 'av']
惰性匹配+? 只要匹配出+前面的字符的1次就不匹配了
import re print(re.findall("abcd","asdcabcd")) print(re.findall("avd+?","avddddcaavddbcavavd")) 结果: ['abcd'] ['avd', 'avd', 'avd']
二、字符集
1、或的功能
import re print(re.findall("x[yz]","xyzzzxyzxssdzx")) print(re.findall("x[yz]","xyzzzxzsdxzzy")) print(re.findall("x[yz]p","xypzzzxzsdxzpzy")) 结果: ['xy', 'xy'] ['xy', 'xz', 'xz'] ['xyp', 'xzp']
2、[]中得特殊符号- 匹配字母
取小写字符
import re print(re.findall("[a-z]","as32eer45ttt564")) 结果: ['a', 's', 'e', 'e', 'r', 't', 't', 't']
取大写字
import re print(re.findall("[A-Z]","as32eADCrc45ttDWSDS564")) 结果: ['A', 'D', 'C', 'D', 'W', 'S', 'D', 'S']
取大小写字母
import re print(re.findall("[a-zA-Z]","as32eADCrc45ttDWSDS564")) 结果: ['a', 's', 'e', 'A', 'D', 'C', 'r', 'c', 't', 't', 'D', 'W', 'S', 'D', 'S']
取DC后面跟一个字母 取ab后面跟0个或者1 个字母
import re print(re.findall("DC[a-z]?","as32eADCrc45ttDCWSDS564")) 结果: ['DCr', 'DC']
3、[]里面的特殊符号^ 是取反的意思
4、[]里面的特殊符号\ 叫转义符 最牛的一个斜杠
\d 匹配任意十进制数,相当于[0-9]
\D 匹配任意非数字字符,相当于[^0-9]
\s 匹配任何空白字符
\S 匹配任何非空白字符
\w 匹配任何字符数字字符,相当于[a-zA-Z0-9_]
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 & # 等