正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
import re
re.findall(匹配规则,字符串) 以列表形式返回所有匹配的子串,不成功便返回空列表
re.s让 . 匹配包括\n在内的所有字符。
re.search(匹配规则,字符串) 将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功,返回none,否则返回matchobject
re.match(匹配规则,字符串) 只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none
matchobject.group() 返回一个str对象
re.split('[ab]','abcd') #先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
保留作为分割符号的子串
re.sub(匹配规则,替补,字符串,(可选默认全替换)) 将符合匹配的子串替换成替补。
re.subn(匹配规则,替补,字符串) 将符合匹配的子串替换成替补,返回替换后字符串和替换次数
re.finditer(匹配规则,字符串) 返回一个迭代器
通过next(res).group()取值
# res=re.search(r'a/s/f/g/(?P<year>20[01]\d)/[01]\d/\d+','a/s/f/g/2017/06/26')#?P< >命名
# print(res.group('year'),type(res.group()))
# res=re.findall('www\.(?:\w+)\.(?:com|cn)','www.baidu.com www.baidu.cn')#?:取消优先显示()内
# print(res)
================================================================================================================正则表达式
- re1|re2 re1或re2
- . 换行符除外的任何字符
- ^ 匹配字符串的开始
- $ 匹配字符串的结尾
- * 匹配前面出现的正则表达式零次或多次
- + 匹配前面出现的正则表达式一次或多次
- ? 匹配前面出现的正则表达式零次或一次
- {n} 匹配前面出现的正则表达式出现n次
- {m,n} 匹配前面出现的正则表达式出现m次到n 次
- [....] 匹配字符组出现的任一字符
- [x-y] 匹配从字符x到y的任一字符
- [^....] 不匹配此字符集出现的任一字符,包括某一范围的字符
- (|+|?|{})? 用于上面出现的任何‘非贪婪’版本重复匹配次数符号(*,+,?,{})
- (....) 匹配封闭括号中正则表达式(re),并保存为子组
- \d 匹配任何数字,和[0-9]一样(\D是\d的反义,任何非数字符号)
- \w 匹配任何数字字母字符,和[A-Z a-z 0-9_]一样(\W是\w的反义)
- \s 匹配任何空白符,和[\n\t\r\v\f]相同,(\S是\s的反义)
- \b 匹配单词边界(\B是 \b的反义)
- \nn 匹配已保存子组
- \c 逐一匹配特殊字符c 即取消它的特殊意义,按字面匹配
- \A(\Z) 匹配字符串的起始(结束)
几个常用的非贪婪匹配Pattern
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x
就是取前面任意长度的字符,直到一个x 出现