认识爬虫 —— 正则表达式提取
本质是对字符串的处理,正则表达式描述的是一种字符串匹配的模式。简而言之,用具备一定特征意义的表达式对字符串进行检查,将符合条件的子字符串提取出来。
导入模块
import re
一、单字符匹配
match(表达式,匹配对象):匹配某个字符串
import re
text = 'python'
result = re.match('py',text)
print(result.group())
>>> py
1.从起始位置进行匹配
2.只能匹配某个,并且返回的结果是object => 使用group()方法进行打印
3.匹配不到,不会报错,返回None
. :匹配任意的某个字符
import re
text = '1python'
result = re.match('.',text)
print(result.group())
>>> 1
1.无法匹配换行符
2.从起始位置进行匹配
\d:匹配任意的某个数字
从起始位置进行匹配
import re
text = '1python'
result = re.match('\\d',text)
print(result.group())
或
import re
text = '1python'
result = re.match(r'\d',text)
print(result.group())
>>> 1
\D:除数字外均可匹配
从起始位置进行匹配
import re
text = '_python'
result = re.match(r'\D',text)
print(result.group())
>>> _
\s:匹配空白字符
1.从起始位置进行匹配
2.\n \t \r 空格都表示空白字符
import re
text = '\npython'
result = re.match(r'\s',text)
print(result.group())
\w:匹配小写的a-z、大写的A-Z,数字和下划线
import re
text = '_python'
result = re.match(r'\w',text)
print(result.group())
>>> _
\W:匹配除小写\w之外的所有字符
eg. —
[]:表示组合方式,只要在中括号内的内容均可匹配
1.从起始位置进行匹配
2.[] 内多个匹配内容时,取"或",只要匹配对象中含有其中一个内容就匹配
import re
text = '?-python'
result = re.match('[-?]',text)
print(result.group())
>>> ?
二、多字符匹配
*:匹配零个或者多个字符
import re
text = '151-1234-5678'
result = re.match(r'[\d]*',text)
print(result.group())
>>> 151
+:匹配一个或者多个(至少有一个)
import re
text = 'a151-1234-5678'
result = re.match(r'[a\d]+',text)
print(result.group())
>>> a151 (匹配到不满足条件为止)
?:要么匹配0个,要么匹配1个
import re
text = '-a151-1234-5678'
result = re.match(r'[-a\d]?',text)
print(result.group())
>>> - (最多让你匹配一个)
{m}:匹配指定个数m
import re
text = '-151-1234-5678'
result = re.match(r'[-\d]{2}',text)
print(result.group())
>>> -1
{m,n}:匹配m到n个(默认匹配最多次)
import re
text = '-151-1234-5678'
result = re.match(r'[-\d]{2,4}',text)
print(result.group())
>>> -151
三、匹配规则的替代方案
1. \d ->> [0-9]:匹配所有的数字
2. \D ->> [^0-9]:匹配所有的非数字
3. \w ->> [0-9a-zA-Z_]:匹配所有的数字、字母和下划线
4. \W ->> [^0-9a-zA-Z_]:匹配所有的非数字、字母和下划线
5. [\d\D]、[\w\W]:匹配所有的字符
四、特殊匹配
[.]+:[.],表示的是仅表示匹配点(.),配合+,即匹配. 一次或多次
五、特殊匹配进阶
从头匹配
re.match:必须从字符串开头进行匹配,一旦起始位置出错,便报错
全局遍历
re.search:从左到右进行字符串的遍历,找到就返回,后续再次出现,但也不再返回结果
^:中括号内表示取反;中括号外表示以指定的字符开始
$:表示以...为结尾
| :匹配多个表达式或者字符串
六、贪婪模式与非贪婪模式
贪婪模式:正则表达式会尽可能多地匹配字符【默认就是贪婪模式】
非贪婪模式:正则表达式会尽可能少地匹配字符 【添加?】