常用模块——re模块

re模块

正则表示式

由堆具有特殊意义的字符组成的式子。用于匹配查找字符串内容。

主要学习重点,就是学习这些字符的含义。

匹配字符的特殊字符

精准匹配

"abc"表达式不包含任何特殊字符,就是精准匹配,说白了判断是否相同

print(re.findall('abc','abcbbb'))
#['abc']

 

单个字符 匹配

f

位置匹配

符号 含义
A 从字符的开始处开始匹配
 从字符的结尾处匹配
^ 从字符的开始处开始匹配
$ 从字符的结尾处匹配

 

 

 

 

^$为整体匹配

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'>
#结尾  $
print(re.findall('abc$','dfabc'))
print(re.findall('abc','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'#匹配a
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
原文地址:https://www.cnblogs.com/msj513/p/9818386.html