re 模块 025
Posted f-g-f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了re 模块 025相关的知识,希望对你有一定的参考价值。
re 由Python提供的一套关于处理正则表达式的模块有以下四个核心功能:
import re
1. findall # 查找所有 返回列表(list)
import re lst = re.findall(‘m‘,‘mai le fo len , mai ni mei!‘) print(lst) #[‘m‘, ‘m‘, ‘m‘] lst1 = re.findall(r‘d+‘,‘5点之前,记得给我5000万‘) print(lst1) #[‘5‘, ‘5000‘]
2. finditer # 和findall 差不多 这是是返回迭代器
import re it = re.finditer(‘m‘,‘mai le fo len, mai ni mei!‘) print(it) #<callable_iterator object at 0x0000021AF5CAC0F0> 迭代器 for el in it: print(el.group()) #依然需要分组 挨个拿到元素
3.search 会进行进行匹配 如果匹配到第一个结果, 就会返回这个结果 如果匹配不上返回的是None
ret = re.search(‘a‘,‘abc‘).group() print(ret) # a ret1 = re.search(r‘d‘,‘5点以前, 打给我25块!‘).group() print(ret1) # 5
4.match 只能从字符串的开头进行匹配 (如果不是a开头会报错)
ret = re.match(‘a‘,‘abc‘).group() print(ret) # a
正则 : 在Python中()表示分组 (?:)去掉Python的分组
(?P<名字>正则) 把正则匹配到的内容分组成‘名字‘组
5.其他操作
split 按照正则切割.
ret = re.split(r‘[ab]‘,‘qwerafjbcd‘) # 先按‘a‘分割得到‘qwer‘和‘fjbcd‘,再对两者分别按b分割 print(ret) #[‘qwer‘, ‘a‘, ‘fj‘, ‘b‘, ‘cd‘] 没有了a 和 b ret1 = re.split(r‘([ab])‘,‘qwerafjbcd‘)# 切割过程和上边的一样 不过保留了a和b print(ret1) #[‘qwer‘, ‘a‘, ‘fj‘, ‘b‘, ‘cd‘] 有了a 和 b
sub 替换.
result = re.sub(‘250‘,‘__sb__‘,‘alex250taibai250taihei250ritian250liuwei‘) print(result) #alex__sb__taibai__sb__taihei__sb__ritian__sb__liuwei
compile
obj = re.compile(r‘d{3}‘) # 将正则表达式编译成为一个正则表达式对象,规则是要匹配的是3个数字 ret = obj.search(‘abc123eeee‘) #正则表达式对象调用search,参数为待匹配的字符串 print(ret.group()) # 结果是123
爬虫重点
obj = re.compile(r‘(?P<id>d+)(?P<name>e+)‘) #从正则表达式匹配的内容每个组起名字‘?P<>是一体的一起出来‘ ret = obj.search(‘abc123eeee‘) # 搜索 print(ret.group()) #结果:123eeee print(ret.group(‘id‘))# 结果 123 获取id组的内容 print(ret.group(‘name‘)) # 结果 eeee 获取name组中的内容
坑
ret = re.findall(‘www.(baidu|oldboy).com‘, ‘www.oldboy.com‘) print(ret) # 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 ret = re.findall(‘www.(?:baidu|oldboy).com‘, ‘www.oldboy.com‘) # ?: 当前的()不分组 print(ret) # [‘www.oldboy.com‘]
二 . 模块
import 模块名
以上是关于re 模块 025的主要内容,如果未能解决你的问题,请参考以下文章