[笔记]python爬虫:正则表达式库re

时间:2021-11-04 22:36:09

1.正则表达式的语法:

正则表达式的常用操作符:

常用操作符 含义
. 表示单个字符
[] 字符集,[a-z]表示a到z之间的字符
[^] 非字符集,对单个字符给出排除范围
* 前一个字符出现0次或者无限次扩展
+ 前一个字符出现1次或者无限次扩展
? 前一个字符出现0次或者1次扩展
| 左右表达式的任意一个
{m} 扩展前一个字符m次
{m,n} 扩展前一个字符m到n次(含n次)
^ 匹配字符串的开头
$ 匹配字符串的结尾
() 分组标记,内部只能用
\d 数字,等价于[0-9]
\w 单词字符,等价于[A-z a-z 0-9]

2.re库的基本使用:

re.search(pattern, string, flags=0)
作用:在字符串中搜索匹配正则表达式第一个位置

参数 含义
pattern 正则表达死字符串或者原生字符串表示
string 待匹配字符串
flags 正则表达式使用时的控制标记

范例:

match=re.search(r'[1-9]\d{4}', 'BIT 10081')
if match:
print(match.group(0))

re.match(pattern, string, flags=0)
作用: #在字符串中的开始位置起匹配正则表达式
范例:

match1=re.match(r'[1-9]\d{4}', '10081 BIT')
match2=re.match(r'[1-9]\d{4}', 'BIT 10081')
if mathc1:
print(match1.group(0))
if match2:
print(match2.group(0))

re.findall(pattern, string, flags=0)
作用:搜索字符串,以列表类型返回全部匹配字符串
范例:

ls=re.findall(r'[1-9]\d{4}', 'BIT10081 TS10084')
print(ls)

re.split(pattern, string, maxsplit=0, flags=0)
作用:将一个字符串安正则表达式匹配结果分割
范例:

re.split(r'[1-9]\d{4}', 'BIT10081 TSU10084')
re.split(r'[1-9]\d{4}', 'BIT10081 TSU10084', maxsplit=1)

re.finditer(pattern, string, flags=0)
作用:搜索字符串,返回一个匹配结果的迭代类型
范例:

for m in re.finditer(r'[1-9]\d{4}', 'BIT10081 TSU10084'):
if m:
print(m.group(0))

re.sub(pattern, repl, string, count=0, flags=0)
作用:在一个字符串中替换所有匹配正则表达式的子串

参数 含义
repl 替换匹配字符串的字符串
count 匹配的最大替换次数
flags 正则表达式使用时的控制标记

范例:

re.sub(r'[1-9]\d{4}', ':zipcode', 'BIT10081 TSU10084')

3.re库的一种等价用法

print('表达式1:')
rst=re.search(r'[1-9]\d{4}', 'BIT10081')

print('等价表达式2:')
pat=re.compile(r'[1-9]\d{4}')
rst=pat.search('BIT10081')

4.re库的match对象

match对象的属性:

属性 含义
.string 待匹配的文本
.re 正则表达式
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置

match对象的方法:

方法 含义
.group(0) 获得匹配后的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串的结束位置
.span() 返回(.start(), .end())

5.re库的贪婪匹配和最小匹配

print('re库默认贪婪匹配,输出最长匹配字符串:')
match=re.search(r'py.*n', 'pyanbncndn')
match.group(0)

最小匹配:

操作符 含义
*? 前一个字符出现0次或者无限次扩展
+? 前一个字符出现1次或者无限次扩展
?? 前一个字符出现0次或者1次扩展
{m,n} 扩展前一个字符m到n次(含n次)
print('最小匹配字符串:')
match=re.search(r'py.*?n', 'pyanbncndn')
match.group(0)

该问参考中国大学MOOC课程 《python网络爬虫与信息提取》