关于python爬虫经常要用到的一些Re.正则表达式
2024-10-14 00:11:38
转载:https://blog.csdn.net/skyeyesxy/article/details/50837984
1.正则表达式的常用符号与方法
常用符号:点号,星号,问号与括号(小括号)
- (.):匹配任意字符,换行符\n除外
- (*):匹配前一个字符0次或无限次
- (?):匹配前一个字符0次或1次
- (.*):贪心算法
- (.*?):非贪心算法
- ( ):括号内的数据作为结果返回
常用方法:re.findall, re.search, re.sub
- findall:匹配所有符合规律的内容,返回包含结果的列表
- search:匹配并提取第一个规律的内容,返回一个正则表达式对象(object)
- sub:替换符合规律的内容,返回替换后的值
2.举例说明
1)findall
a.点号(.)
>>import re
a = 'xz123'
b = re.findall('x.', a)
print(b)
>>输出 ['xz']
############点.
是一个占位符,一个.
代表一个符号
b.星号(*)
>>import re
a = 'xyxy123'
b = re.findall('x*', a)
print b
>>
- 输出
['x', '', 'x', '', '', '', '', '']
############依次匹配字符,有则显示,无则显示''
(空)。
c.问号(?)
>>import re
a = 'xy123'
b = re.findall('x?', a)
print b
- 单独与
*
一样,前面附加其他的符号将做非贪心限制
d.贪心(.*)
import re
secret_code = 'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
b = re.findall('xx.*xx', secret_code)
print b
- 输出
['xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxx']
只要满足条件全部显示,贪心算法
e.非贪心(.*?)
b = re.findall('xx.*?xx', secret_code)
- 输出
['xxIxx', 'xxlovexx', 'xxyouxx']
以上只做了解,一般只用(.*?)
f.经典用法(.*?)
b = re.findall('xx(.*?)xx', secret_code)
- 输出
['I', 'love', 'you']
()
包围所需要的内容,括号内的内容作为结果返回,不需要的内容放在括号外面
2)re.S
import re
secret_code = '''ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
#love后有换行符
b = re.findall('xx(.*?)xx', secret_code)
print b
- 输出
['I', 'bvk14rgjh']
,因为.
不能匹配换行符。所以会一行为一个搜索项去找。匹配任何字符除了新的一行
import re secret_code = '''ghkj08hs68xxIxxa14kgj4w314exxlove xxbvk14rgjhxxyouxxfj4286ykjhag2''' #love后有换行符 b = re.findall('xx(.*?)xx', secret_code, re.S) print b
输出
>>['I', 'love\n', 'you']
,re.S让.
匹配所有行,包括了换行符(以\n
的形式出现
4)sub
import re
s = '123abcssfasdfas123'
output = re.sub('123(.*?)123', '123789123', s)
print output
>>
- 输出
123789123
- sub将符合条件的()内内容提换
6)compile用法
import re
secret_code = '''ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
pattern = 'xx(.*?)xx'
new_pattern = re.compile(pattern, re.S)
b = re.findall(new_pattern, secret_code)
print b
因为findall自动调用compile方法,所以不先编译规律compile再匹配
7)匹配纯数字(\d+)
import re
a = 'dfhkgh43gfhja873y5t2167715'
b = re.findall('(\d+)', a)
print b
>>
- 输出
['43', '873', '5', '2167715']
最新文章
- 【专业找水题】状压dp最水题,没有之一
- url-pattern
- 学习OpenCV——行人检测&;人脸检测(总算运行出来了)
- Angular学习
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
- iOS9适配+warning消除
- servlet操作数据库
- SUP (SAP Mobile SDK 2.2) 连接 Sybase SQL Anywhere sample 数据库
- bottle-session 0.3 : Python Package Index
- VS2013程序打包部署详细图解
- RMQ-ST算法的理解与实现(C++)
- 【C#】使用OWIN创建Web API
- Linux安装solr
- 进程描述和控制(os 笔记二)
- Ubuntu 16.04卸载一些不必要的预装软件
- python简说(十四)内置函数
- Java操作HDFS代码样例
- 3dContactPointAnnotationTool开发日志(二八)
- MySQL安装部署及调优
- Python中的Bunch模式
热门文章
- java 压缩文件
- 24时区,GMT,UTC,DST,CST时间详解
- HTTP请求过程-域名解析和TCP三次握手建立链接
- redux (一)
- imageview无法显示图片:java.lang.RuntimeException: Canvas: trying to draw too large(281520000bytes) bitmap
- 使用Python从Workflowy同步大纲到印象笔记
- RDP 拒绝服务攻击
- 快速排序及优化(Java实现)
- Java枚举类使用
- spring cloud 专题一 (spring cloud 入门搭建 之 Eureka注册中心搭建)