Python 正则表达式
findall 和 search 的区别
findall()
1. 会返回所有匹配成功的结果并返回一个列表集合
search()
1.会返回匹配成功的一个结果后就不再匹配了并且返回的是一个对象
2. 没有匹配成功什么也不返回
3. 匹配成功后取值调用 group()方法
split()
正则匹配分割
import re # 按照单个指定分割符进行分割 li=re.split( ',', 'a,b,c!d' )
# 按照多个指定分割符进行分割
li=re.split('[,!]', 'a,b,c!d' )
sub()
正则匹配替换
import re res=re.sub( '\d+','A', 'abc123hello345' ) print(res) # subn, 返回一个元组,第一个结果为替换的值,第二个结果为替换的次数 tup=re.subn( '\d+','A', 'abc123hello345' ) print(tup)
正则分组
分组正则方案1:
?P<>这是固定的写法,将字符串进行分组,分别分为 name一组和age一组
import re res=re.search('(?P<name>[a-z]+)(?P<age>[0-9]+)','jack23erick24') val=res.group('name','age') print(val) # ('jack', '23')
反斜杠的作用
当反斜杠和指定字符串搭配的时候则有着特殊的功能
\d 匹配 0~9当中任意一个数字
\D匹配 任意一个非数字的字符串
\s 匹配一个空格
\S 匹配一个非空格
\b 匹配一个特殊的字符串
为了防止正则匹配前发生转义,一般要使用 原始字符串 r
re.findall( r'a\b'c , ' hello a cthanks')
符号 | 简称 | 功能 | 格式 | 使用 | 备注 |
. | 逗号 | 匹配一个任意字符串 | ############ | ||
^ | 尖角号 | 匹配的字符串必须是尖角号所规定的字符串开头 | ^abc | re.findall( '^abc' , 'abcdefg' ) | 所匹配的字符串必须以abc开头,否则后面就不再进行匹配了 |
$ | 刀勒符 | 匹配的字符串必须是刀勒符所规定的字符串结尾 | $test | re.findall( 'test$' , 'abcdefgtest' ) | 所匹配的字符必须以test结尾, |
* | 星号 | 匹配 0~多次 | abc* | re.findall( 'abc*' , 'abccccc' ) | 所匹配的字符串包含ab,或包含abc,或包含abcccccc等多个c |
+ | 加号 | 匹配 1~多次 | abc+ | re.findall( 'abc+' , 'abccccc' ) | 所匹配的字符串至少包含abc,或包含多个abcccccc等多个c |
? | 问号 | 匹配 0~1次 | abc? | re.findall( 'abc?' , 'abc' ) | 所匹配的字符串包含ab,或者包含abc |
{} | 大括号 | 匹配指定次数 | abc{4} | re.findall( 'abc{4}' , 'abcccc' ) | 所匹配的字符串所包含abcccc |
[a-z] | 中括号 | 匹配a-z当中的任意一个字母 | ab[a-z] | re.findall( 'ab[a-z]' , 'abcderg1234' ) | 所匹配的字符串所包含abc |
[^a-z] | 中括号 | 匹配不包括a-z当中的任意一个字符 | |||
\d | 反斜杠d | 匹配0-9当中的任意一个数字 | |||
\D | 反斜杠D | 匹配非数字当中的任意一个字符串 | |||
\b | 反斜杠b | 匹配一个特殊字符,例如空格,&,#等 | \b | re.findall( r'i\b' , 'helo i am a list' ) | 匹配字符串包含i和空格 |
() | 小括号 | 分组,将表达式看作整体 | (abc)* | re.findall( '(abc)*' , 'abcabcabc' ) | 匹配多个 abc,abc,abc |