19-10-21 Python 正则表达式 爬虫

【正则表达式】

       由一些特定字符及其组合所组成的字符串表达式,用于对目标字符串进行过滤。

【正则表达式的常见基本符号】

基本符号含义解释
d数字D为非数字
w单词字符(大小写字母或数字)W为非单词字符
.单个字符代表除换行符以外的任意单个字符。例如‘a.c’可以代表‘abc’、‘acc’,但不能代表‘abbc’
?多个字符(非贪婪模式)匹配前一个字符0次或1次
*

多个字符

匹配前一个字符0次或无数次
+多个字符匹配前一个字符1次或无数次
|分隔字符之间“或”的关系,例如‘[P|p]ython’能匹配出‘Python’或‘python’
^开始引导字符串开始的特征
$结尾引导字符串结尾的特征
\转义为其后面的符号转义,但为避免与Python字符串本身的转移相混淆,建议正则表达式以r前缀统一转义。例如‘\d’可以表示为r‘d’
[]界定单个字符 
()界定一个整体 
{}重复次数 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【精确匹配】

  1. 数字和字符:用 '\d' 可以匹配一个数字,用 '\w' 可以匹配一个字符(包括数字)。例如:'11\d' 可以匹配 '114',但不能匹配 '11A' ;'\d\d\d' 可以匹配 '021' 但不能匹配 'abc' ;'\w\w\d' 可以匹配 'mp4' 也可以匹配 '163' 。
  2. 任意单个字符:用 '.' 可以匹配任意单个字符。例如 'py.' 可以匹配 'py2'、'py!' 、'py@' 或 'py\' 。
  3. 多个字符:用 '*' 表示任意个字符(包括0个),用 '+' 表示至少一个字符,用'?'表示0个或1个字符,用 '{n}' 表示n个字符,用 '{m,n}' 表示n-m个字符,例如,有正则表达式 '\d{3}\s+\d{3,8}' 中,'\d{3}' 表示匹配三个数字, '\s+' 代表匹配一个或无数个空格(包括制表位空格),'\d{3,8}' 代表3~8位数字。这样,该表达式就可以匹配带区号的以任意个空格隔开的电话号码。
  4. 字符范围:用 '[]' 表示字符范围,一组 '[]' 只能表示一个字符,例如,'[0-9a-zA-Z\_]'可以匹配1个数字、字母或下划线;'P|y' 也是用来表示字符范围,可以匹配成 'P' 或 'p'。
  5. 开头和结尾:用 '^' 引导字符串开头,例如 '^\d' 表示必须以数字开头;用 '$' 指示字符串结尾,例如 '\d$' 表示必须以数字结尾。
  6. 特使字符:特殊字符通常指非字母、非数字字符。例如,换行符 '\n'、回车符 '\r'、空白符 '\s'、制表位符 '\t' 等。 为避免与语法表达式中符号的歧义,要用 '\' 转义或加 r 前缀统一转义。例如常见的用 '-' 隔开区号的电话号码,可用正则表达式 '\d{3}\-\d{3,8}' 或 r'd{3}-d{3,8}' 匹配。
  7. 汉字:匹配汉字的正则表达式为 '\u4e00-\u9fa5' 。在支持Unicode编码的系统中也可用汉字直接精准匹配

【贪婪匹配】

       这是一种尽可能多地匹配字符地匹配思想,例如:'[0-9A-Za-z][0-9A-Za-z]*' 可以匹配由字母或下划线开头,与任意个数字、字母或下划线组成字符串(即Python的变量命名规则)。贪婪匹配时正则表达式默认的匹配方式,但在实际应用中有时也不能满足精准匹配的需求。用 '?' 可将前面的字符匹配从贪婪匹配转变为精准匹配,即尽可能减少重复匹配, '{m,n}?' 表示对前一个字符重复 m~n 次,并且尽可能少地重复。 例如在匹配字符串 'aaaaaa' 时, 'a{2,4}' 取上限可匹配 'aaaa',但 'a{2,4}?' 取下限只匹配 'aa'。

【替换】

用re库中地sub()和subn()函数,可以将正则表达式所匹配的字符串内容替换成指定字符串内容,并返回替换后的字符串。这两个函数用法一样,只是sub()返回的是替换后的新字符串,而subn()是以宇宙女足类型返回新字符串和替换次数。通式如下:

re.sub(pattern, replace_str, sourse_str[, count, flags])

re.subn(pattern, replace_str, sourse_str[, count, flags])

其中,replace_str 和 sourse_str分别代表拟替换字符串和源字符串,体验代码如下:

import re

pattern = re.compile('[\d]{3}')
sourse_str = '1234abcd123def2222hijk'
print(p.sub('xxx', sourse_str))
print(p.subn('xxx', sourse_str))

运行结果为:

xxx4abcdxxxdefxxx2hijk

('xxx4abcdxxxdefxxx2hijk', 3)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值