1> 正则表达式:就是字符串的匹配规则,在多数编程语言里都有相应的支持
2>常见匹配规则
匹配符 | 用法 | 实例 | 匹配举例 |
. | 匹配一个任意除换行符'\n'外的字符 | a. | ab |
* | 匹配前一个字符的0次或无限次,类似{0,max} | ab* | a或者abbbb |
+ | 匹配前一个字符的1次或无限次,类似{1,max} | ab+ | ab或者abbbb |
? | 匹配前一个字符的0次或1次,类似{0,1} | ab? | a或者ab |
{m} | 匹配前一个字符的m次 | a{2}b | aab |
{m, n} | 匹配前一个字符的m到n次 | a{1, 3}b | ab或aab或aaab |
\d | 匹配一个数字,等同于[0-9] | a\d | a1 |
\D | 匹配一个非数字 | a\D | a% |
\w | 匹配一个合法字符[A-Za-z0-9_] | a\w | a1或ab或a_ |
\W | 匹配除合法字符外的,如特殊字符等 | a\W | a@ |
\s | 匹配空白字符:空格,\t, \r, \n 等 | a\sb | a b |
\S | 匹配非空白字符 | a\Sb | a#b |
^ | 匹配字符串开头 | ^ab | ab |
$ | 匹配字符串结尾 | ab$ | ab |
\A | 类似^ | \Aab | ab |
\Z | 类似$ | ab\Z | ab |
\ | 转义符,变成普通字符,无其他含义 | a\ab | a.b |
[...] | 字符集,可填写任意字符,默认单个匹配,也可设定范围 | a[1%]b | a1b或a%b |
| | 或,|左右任意匹配一个,顺序从左至右,匹配上则跳出逻辑 | a|b | a或b |
(...) | 分组表达式,括号内可作为整体 | (a|b){2} | ab或bb或ba |
3>re的匹配语法
- re.match 从头开始匹配
- re.search 全局匹配,从左至右,匹配到一个就不再匹配
- re.findall 把所有匹配到的字符放到以列表中的元素返回
- re.split 以匹配到的字符当做列表分隔符
- re.sub 匹配字符并替换
- re.fullmatch 全部匹配
例如re.match('\d', '1a')能匹配到1 ,而re.match('\d', 'a1')则匹配不到
3.2>re.search(pattern, string, flags=0)
例如re.search('\d', '1a')能匹配到1 ,而re.search('\d', 'a1')也能匹配到1
3.3>re.findall(pattern, string, flags=0)
例如re.findall('\d', '1a1b1')能匹配到所有1 并返回所有匹配值的列表格式,match和search都只能匹配单个值,findall能
返回所有符合条件的值
3.4>re.sub(pattern, repl, string, count=0, flags=0) # 三个参数,表达式,替换值,字符串,count要换几次
例如 re.sub('\d+', 'a', '123b'),将返回ab
3.5>re.split(pattern, string, maxsplit=0, flags=0)
例如 re.split('\d|\W', 'aa-bb+cc4dd') # 以数字或特殊字符切割
3.6>re.fullmatch(pattern, string, flags=0) # 完全匹配,
例如re.fullmatch('([1-9]|[1-9][0-9]|1\d{2}|2[0-5][0-5])\\.', '255.')可以匹配1-255之间的数据加一个.,其他都不匹配
re.fullmatch('([1-9]|[1-9][0-9]|1\d{2}|2[0-5][0-5])(\\.([0-9]|[1-9][0-9]|1\d{2}|2[0-5][0-5])){3}可以匹配
1.0.0.0 - 255.255.255.255
4>re.compile(pattern, flags=0)
可以把正则表达式编译成一个正则表达式对象。对于经常要用的正则表达式,可以提高效率。(已提前编译好
,直接在编译后的对象上匹配数据即可)