本文实例讲述了Python3正则匹配re.split,re.finditer及re.findall函数用法。分享给大家供大家参考,具体如下:
re.split re.finditer re.findall
@(python3)
官方 re 模块说明文档
re.compile() 函数
编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。
re 模块最离不开的就是 re.compile 函数。其他函数都依赖于 compile 创建的 正则表达式对象
re.compile(pattern, flags=0)
- pattern 指定编译时的表达式字符串
- flags 编译标志位,用来修改正则表达式的匹配方式。支持 re.L|re.M 同时匹配
flags 标志位参数
re.I(re.IGNORECASE)
使匹配对大小写不敏感
re.L(re.LOCAL)
做本地化识别(locale-aware)匹配
re.M(re.MULTILINE)
多行匹配,影响 ^ 和 $
re.S(re.DOTALL)
使 . 匹配包括换行在内的所有字符
re.U(re.UNICODE)
根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X(re.VERBOSE)
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
示例:
import re content = 'Citizen wang , always fall in love with neighbour,WANG' rr = re.compile(r'wan\w', re.I) # 不区分大小写 print(type(rr)) a = rr.findall(content) print(type(a)) print(a)
findall 返回的是一个 list 对象
<class '_sre.SRE_Pattern'>
<class 'list'>
['wang', 'WANG']
re.split 函数
按照指定的 pattern 格式,分割 string 字符串,返回一个分割后的列表。
re.split(pattern, string, maxsplit=0, flags=0)
- pattern compile 生成的正则表达式对象,或者自定义也可
- string 要匹配的字符串
- maxsplit 指定最大分割次数,不指定将全部分割
import re str = 'say hello world! hello python' str_nm = 'one1two2three3four4' pattern = re.compile(r'("font-size: medium">re.findall() 方法返回一个包含所有匹配到的字符串的列表。
- pattern 匹配模式,由 re.compile 获得
- string 需要匹配的字符串
import re str = 'say hello world! hello python' pattern = re.compile(r'("font-size: medium">re.finditer 、re.findall
re.finditer(pattern, string[, flags=0])
re.findall(pattern, string[, flags=0])
- pattern compile 生成的正则表达式对象,或者自定义也可
- string 要匹配的字符串
findall 返回一个包含所有匹配到的字符的列表,列表类以元组的形式存在。
finditer 返回一个可迭代对象。
示例一:
pattern = re.compile(r'\d+@\w+.com') #通过 re.compile 获得一个正则表达式对象 result_finditer = re.finditer(pattern, content) print(type(result_finditer)) print(result_finditer) # finditer 得到的结果是个可迭代对象 for i in result_finditer: # i 本身也是可迭代对象,所以下面要使用 i.group() print(i.group()) result_findall = re.findall(pattern, content) print(type(result_findall)) # findall 得到的是一个列表 print(result_findall) for p in result_finditer: print(p)
输出结果:
<class 'callable_iterator'>
<callable_iterator object at 0x10545ec88>
123456@163.com
234567@163.com
345678@163.com
<class 'list'>
['123456@163.com', '234567@163.com', '345678@163.com']
由结果可知:finditer 得到的是可迭代对象,finfdall 得到的是一个列表。
示例二:
import re content = '''email:123456@163.com email:234567@163.com email:345678@163.com ''' pattern = re.compile(r'("htmlcode">re.findall(r"\d+@\w+.com", content) ['2345678@163.com', '2345678@163.com', '345678@163.com']有一个分组返回的是分组的匹配
re.findall(r"(\d+)@\w+.com", content) ['2345678', '2345678', '345678']多个分组时,将结果作为 元组,一并存入到 列表中。
re.findall(r"(\d+)@(\w+).com", content) [('2345678', '163'), ('2345678', '163'), ('345678', '163')]PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]