常用模块——re模块
re模块
正则表示式
由堆具有特殊意义的字符组成的式子。用于匹配查找字符串内容。
主要学习重点,就是学习这些字符的含义。
匹配字符的特殊字符
精准匹配
"abc"表达式不包含任何特殊字符,就是精准匹配,说白了判断是否相同
print(re.findall('abc','abcbbb'))
#['abc']
单个字符 匹配
\n \t \f
位置匹配
符号 | 含义 |
\A | 从字符的开始处开始匹配 |
\Z | 从字符的结尾处匹配 |
^ | 从字符的开始处开始匹配 |
$ | 从字符的结尾处匹配 |
^$为整体匹配
print(re.match('^abc','abccc'))
#<re.Match object; span=(0, 3), match='abc'>
print(re.match('\Aabc','abccc'))
#<re.Match object; span=(0, 3), match='abc'>
#结尾 \Z $
print(re.findall('abc$','dfabc'))
print(re.findall('abc\Z','sjjfabc'))
#['abc']
#['abc']
范围匹配
判断字符是否在一个范围内
符号 | 含义 |
\w | 字母 数字 下划线 |
\W | 非字母 数字 下划线 |
\d | 数字 |
\D | 非数字 |
\s | 空白字符 |
\S | 非空字符 |
[] | 手动指定范围 ascii码表范围 |
[^] | 指定范围以外的内容 与上面相反 |
. | 除了换行符之外的任何字符 |
重复匹配
字符 | 含义 |
* | 任意次数 |
+ | 一次或多次 |
? | 0次或1次 |
*+都是贪婪匹配,会尝试尽可能多取
给上述表达式加上?变成了非贪婪模式,尽可能的少取,最常用
print(re.findall('\w+','ndfjbsasb'))
print(re.findall('\w+?','ndfjbsasb'))
#['ndfjbsasb']
#['n', 'd', 'f', 'j', 'b', 's', 'a', 's', 'b']
分组
给表达式中需要单独获取的部分加上括号
‘src="(http.*?)"’
一个表达式中可以有多个分组
用search或match得到match对象调用group传入的索引来获取分组内容
text = '<a class="toolsite" href="http://12306.360.cn/?src=daohang_2" title="抢火车票">抢火车票</a>'
print(re.findall('(http.*?)"',text))
#['http://12306.360.cn/?src=daohang_2']
注意
如果匹配的内容包括\ 得变成4个斜杠或者r'\\'
text = r'a\b'#匹配a\b
print(re.findall('a\\\\b',text))
print(re.findall(r'a\\b',text))
#['a\\b']
#['a\\b']
re模块的常用的方法
text = 'daaaccddddasd'
re.findall()
检索所有内容,在列表中显示所有符合条件的字符串
res = re.findall('a+',text)
print(res)
#['aaa', 'a']
re.match()
从开头检索内容,若开头内容符合条件,则返回第一个条件的match对象,否则返回None
res = re.match('d',text)
print(res)
print(res.group())
#<re.Match object; span=(0, 1), match='d'>
#d
re.search()
检索所有内容,内容第一符合条件,则返回第一个符合条件的match对象,否则返回None
match对象可以通过.group()
res = re.search('a+',text)
print(res)
print(res.group())
#<re.Match object; span=(1, 4), match='aaa'>
#aaa
re.complie()
将传入的字符串表达式,转变成一个正则对象,可以适应各种re操作。
pa = re.compile('a+')
print(re.findall(pa,text))
#['aaa', 'a']
re.sqlit()
将字符串根据条件切分,成字典形式
res = re.split('a+',text)
print(res)
#['d', 'ccdddd', 'sd']
re.sub()
将字符串根据条件替换,返回新的字符串
text = 'daaaccddddasd' res = re.sub('a+','A',text) print(res) #dAccddddAsd