admin 发表于 2020-9-5 10:55:20

python正则表达式备忘

\d 匹配任何十进制数;相当于
\D 匹配任何非数字字符;相当于[^0-9]
\s 匹配任何空白字符;相当于[\t\n\r\f\v]
\S 匹配任何非空白字符;相当于[^\t\n\r\f\v]
\w 匹配任何字母数字_;相当于
\W 匹配任何非字母数字_;相当于[^a-zA-Z0-9_]

正则表达式里当有重复一个表达式规则需求的时候,用{数字}表示,比如:

r = r"^010-\d{8}"#这个表达式标识匹配010开头的8位电话号码,\d标识匹配数字0-9

^作用:标识开头
$作用:标识结尾

*作用:
指定前一个字符可以被匹配零次或更多次,而不是只有一次。匹配引擎会试着重复尽可能多的次数(不超过整数界定范围20亿)

比如 r= r"ab*"标识匹配b字符0次或者多次
[]作用:
匹配其中任何一个
比如[\+\-\*]匹配+-*中任何一个字符,元字符注意转译成普通字符,否则不起作用

|作用:常用来分组,配合()使用,控制范围
匹配前后字符中一个,比如A|B 匹配A或者B
当有分组的时候,findall会优先返回分组中的数据

[^]作用:
匹配不包括其中任何一个

.作用:
匹配任意一个字符

-作用:
代表一个范围

+作用:
表示匹配一次或更多次。注意*和+不同:*匹配0或者更多次,所以可以根本不出现,而+则要求至少出现一次

?作用:标识可有可无,表示将前面字符重复一次或者0次;还有加载重复元字符后面,标识最小匹配模式

正则表达式:贪婪模式(最大匹配)和非贪婪模式(最小匹配)
在一些标识重复匹配的元字符后面加一个?就会表示非贪婪匹配

{m,n}:比较灵活
其中m和n是十进制整数。该限定符的意思是至少有m个重复,至多到n个重复。a/{1,3}b
忽略m会认为下边界是0,而忽略n的结果将是上边界为无穷大(实际20亿)
{0,}等同于*,{1,}等同于+,而{0,1}等同于?.如果可以的话,最好使用*,+,?

编译正则表达式,编译之后的正则对象匹配速度会比未编译的快很多
import re
p = re.compile("ab")
re.compile编译的时候,我们可以加入一些标识,
re.I(IGNORECASE) 标识编译不区分大小写的正则
re.S(DOTALL) 使.匹配包括换行在内的所有字符,默认不加这个标识的时候.不能匹配\n\t等特殊字符
re.L(LOCALE) 做本地化识别匹配,法语等
re.M(MULTILINE) 多行匹配,影响^和$
re.X(VERBOSE) 能使用REs的verbose状态,使之被组织得更清晰易懂


字符串前加上r定义正则,就不会被任何特殊方式处理,防止反斜杠被转译掉。

re.match只匹配开头
re.search扫描字符串
正则替换
re.sub(正则,用来替换的字符,原始数据字符串)
re.subn,返回多了一个共替换了多少次

正则切割
re.split(正则表达式,原始数据字符)



页: [1]
查看完整版本: python正则表达式备忘