#指尖人生#Python常用模块:re模块
Posted 西鼠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#指尖人生#Python常用模块:re模块相关的知识,希望对你有一定的参考价值。
1、什么是正则?
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
2、常用匹配模式(元字符)
正则表达式分类:
- 基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
- 扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
- Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs
import re
ret=re.findall("yu[a,b]n",123 yuan 34 an yubn) #[]多选已字符
ret=re.findall("[0-9]",yua 123 n 34 an yubn) #-范围
ret=re.findall("[a-zA-Z]",yua 123 n 34 an yubn)
ret=re.findall("[a-zA-Z]+",yua 123 n 34 an yubn) #+ 最大匹配?
ret=re.findall("[^0-9a-zA-Z ]+",yua 123lin n a34 an12 5yubn 中国) #^取反
ret=re.findall([\\u4e00-\\u9fa5]+,yua 123lin n a34 an12 5yubn 中国) #中文
#贪婪匹配:按着规则内最长的内容进行匹配 【.*默认为贪婪匹配】
import re
print(re.findall(a.*b,a1b22222222b)) #[a1b22222222b]
#取消贪婪匹配:? 【 .*?为非贪婪匹配】推荐使用
print(re.findall(a.*?b,a1b22222222b)) #[a1b]
findall:
#fineall:关于分组优先提取、取消分组优先提取?: 、 ()分组
ret=re.findall(http://www.(\\w+).com,http://www.baidu.com http://www.jd.cn http://python.org)
ret=re.findall(http://www.(\\w+).(com|cn),http://www.baidu.com http://www.jd.cn http://python.org)
search:
# #search:查询匹配到的第一个结果,返回对象
ret=re.search(http://www.(?P<yuming>\\w+).com,http://www.baidu.com http://www.jd.com http://python.org)
ret=re.search((?P<xieyi>http)://www.(?P<yuming>\\w+).com,http://www.baidu.com http://www.jd.com http://python.org)
print(ret.group("xieyi"))
print(ret.group("yuming"))
match:
# #match:只匹配第一个
ret=re.match((?P<xieyi>http)://www.(?P<yuming>\\w+).com,http://www.baidu.com http://www.jd.com http://python.org)
print(ret.group("xieyi"))
print(ret.group("yuming"))
附:常见3中类型正则表达式比较
字符 | 说明 | Basic RegEx | Extended RegEx | python RegEx | Perl regEx |
转义 | \\ | \\ | \\ | \\ | |
^ | 匹配行首,例如^dog匹配以字符串dog开头的行(注意:awk 指令中,^则是匹配字符串的开始) | ^ | ^ | ^ | ^ |
$ | 匹配行尾,例如:^、dog$匹配以字符串 dog 为结尾的行(注意:awk 指令中,$则是匹配字符串的结尾) | $ | $ | $ | $ |
^$ | 匹配空行 | ^$ | ^$ | ^$ | ^$ |
^string$ | 匹配行,例如:^dog$匹配只含一个字符串 dog 的行 | ^string$ | ^string$ | ^string$ | ^string$ |
\\< | 匹配单词,例如:\\<frog (等价于\\bfrog),匹配以 frog 开头的单词 | \\< | \\< | 不支持 | 不支持(但可以使用\\b来匹配单词,例如:\\bfrog) |
\\> | 匹配单词,例如:frog\\>(等价于frog\\b ),匹配以 frog 结尾的单词 | \\> | \\> | 不支持 | 不支持(但可以使用\\b来匹配单词,例如:frog\\b) |
\\<x\\> | 匹配一个单词或者一个特定字符,例如:\\<frog\\>(等价于\\bfrog\\b)、\\<G\\> | \\<x\\> | \\<x\\> | 不支持 | 不支持(但可以使用\\b来匹配单词,例如:\\bfrog\\b |
() | 匹配表达式,例如:不支持(frog) | 不支持(但可以使用,如:dogdog | () | () | () |
匹配表达式,例如:不支持(frog) | 不支持(同()) | 不支持(同()) | 不支持(同()) | ||
? | 匹配前面的子表达式 0 次或 1 次(等价于0,1),例如:where(is)?能匹配"where" 以及"whereis" | 不支持(同\\?) | ? | ? | ? |
\\? | 匹配前面的子表达式 0 次或 1 次(等价于\\0,1\\),例如:whereisis\\? 能匹配 "where"以及"whereis" | \\? | 不支持(同?) | 不支持(同?) | 不支持(同?) |
? | 当该字符紧跟在任何一个其他限制符(*, +, ?, n,n,, n,m) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",o+? 将匹配单个"o",而 o+ 将匹配所有 o | 不支持 | 不支持 | 不支持 | 不支持 |
. | 匹配除换行符(\\n)之外的任意单个字符(注意:awk 指令中的句点能匹配换行符) | . | .(如果要匹配包括“\\n”在内的任何一个字符,请使用:(^$)|(.) | . | .(如果要匹配包括“\\n”在内的任何一个字符,请使用: [.\\n] |
* | 匹配前面的子表达式 0 次或多次(等价于0, ),例如:zo* 能匹配 "z"以及 "zoo" | * | * | * | * |
\\+ | 匹配前面的子表达式 1 次或多次(等价于\\1, \\),例如:whereisis\\+ 能匹配 "whereis"以及"whereisis" | \\+ | 不支持(同+) | 不支持(同+) | 不支持(同+) |
+ | 匹配前面的子表达式 1 次或多次(等价于1, ),例如:zo+能匹配 "zo"以及 "zoo",但不能匹配 "z" | 不支持(同\\+) | + | + | + |
n | n 必须是一个 0 或者正整数,匹配子表达式 n 次,例如:zo2能匹配 | 不支持(同\\n\\) | n | n | n |
n, | "zooz",但不能匹配 "Bob"n 必须是一个 0 或者正整数,匹配子表达式大于等于 n次,例如:go2, | 不支持(同\\n,\\) | n, | n, | n, |
n,m | 能匹配 "good",但不能匹配 godm 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次 ,例如:o1,3将配"fooooood" 中的前三个 o(请注意在逗号和两个数之间不能有空格) | 不支持(同\\n,m\\) | n,m | n,m | n,m |
x|y | 匹配 x 或 y,例如: 不支持z|(food) 能匹配 "z" 或"food";(z|f)ood 则匹配"zood" 或 "food" | 不支持(同x\\|y) | x|y | x|y | x|y |
[0-9] | 匹配从 0 到 9 中的任意一个数字字符(注意:要写成递增) | [0-9] | [0-9] | [0-9] | [0-9] |
[xyz] | 字符集合,匹配所包含的任意一个字符,例如:[abc]可以匹配"lay" 中的 a(注意:如果元字符,例如:. *等,它们被放在[ ]中,那么它们将变成一个普通字符) | [xyz] | [xyz] | [xyz] | [xyz] |
[^xyz] | 负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:[^abc] 可以匹配 "Lay" 中的L(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符) | [^xyz] | [^xyz] | [^xyz] | [^xyz] |
[A-Za-z] | 匹配大写字母或者小写字母中的任意一个字符(注意:要写成递增) | [A-Za-z] | [A-Za-z] | [A-Za-z] | [A-Za-z] |
[^A-Za-z] | 匹配除了大写与小写字母之外的任意一个字符(注意:写成递增) | [^A-Za-z] | [^A-Za-z] | [^A-Za-z] | [^A-Za-z] |
\\d | 匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9]) | 不支持 | 不支持 | \\d | \\d |
\\D | 匹配非数字字符(等价于 [^0-9]) | 不支持 | 不支持 以上是关于#指尖人生#Python常用模块:re模块的主要内容,如果未能解决你的问题,请参考以下文章 |