正则表达式
一、元字符
1、匹配单个字符
元字符 功能描述 . 匹配除换行符外的任意字符 [] 字符集合,匹配中括号中包含的的任意一个字符 \d 匹配数字,与[0-9类似] \D 匹配非数字字符,与[^0-9]等效 \w 匹配数字,字母和下划线,效果同[0-9a-zA-Z_] \W 匹配非字母,数字和下划线,与[^0-9a-zA-Z_] 类等效 \s 匹配任何的空字符串,包括空格,换行,制表符,换页,与[ \f\n\r\t\v]等效 \S 与\s相反,与[^ \f\n\r\t\v]等效
2、锚字符(边界字符)
元字符 功能描述 ^ 匹配以^之后的字符或模式结束的字符串 $ 匹配以$前面的字符或模式结束的字符串 \A 匹配字符串开始,只匹配整个字符串的开头,即使在re.M模式下, 也不会匹配匹配其他行的行首 \Z 匹配字符串的结尾,只匹配整个字符串的结尾,即使在re.M模式下,也不会匹配其他行的行尾 \b 匹配一个单词的边界,即单词和空格讲的位置 \B 匹配非单词的边界
3、匹配多个字符
元字符 功能描述 (xyz) 匹配小括号内的xyz(作为一个整体匹配) x? 匹配位于?之前的0个或1个字符或子模式,即问号之前的字符或子模式是可选的. x* 匹配位于*之前的字符或子模式的0次或多次出现 x+ 匹配位于+之前的字符或子模式的1次或多次出现 x{n} 按{}中指定的次数进行匹配.如:{3, 8}表示前面的字符或模式至少重复3次,最多重复8次 x竖线y 匹配位于竖线之前或之后的字符
二、re模块简介
1.方法:
re.match(pattern, string, flags=0)
参数列表: pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式,值如下
re.I—忽略大小写 re.L—做本地化识别 re.M—多行匹配,影响^和$元字符 re.S—使.匹配包括换行符在内的所有字符 re.U—根据Unicode字符集解析字符,影响\w \W \b \B re.X—是我们更灵活的格式理解正则表达式 功能: 尝试从字符串的起始位置 匹配一个模式,如果不是从起始位置匹配成功的,返回None,成功返回match对象。 代码: import re
>> > re. match( "www" , "www.baidu.com" )
< _sre. SRE_Match object ; span= ( 0 , 3 ) , match= 'www' >
>> > re. match( "www" , "ww.baidu.com" )
None
>> > re. match( "www" , "ww.baidu.com" )
None
**re.search( pattern, string, flags=0) **
参数列表: pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式 功能:扫描整个字符串,并返回第一个匹配成功的字符串(match对象) 代码: >> > re. search( "bai" , "www.baidu.com" )
< _sre. SRE_Match object ; span= ( 4 , 7 ) , match= 'bai' >
** re.findall(pattern, string, flags=0) **
参数列表: pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式 功能:扫描字符串,返回所有的参数列表 代码: >> > re. serach( "ab" , "abcbaabab,baab." )
[ 'ab' , 'ab' , 'ab' , 'ab' ]
re.split(pattern, string, maxsplit=0)
参数列表: pattern:切割字符串的模式 string:被切割的字符串 maxsplit:最多分割次数 功能:切割字符串 代码: >> > import re
>> > str = "alpha. beta...gamma delta"
>> > re. split( '[\. ]+' , str )
[ 'alpha' , 'beta' , 'gamma' , 'delta' ]
re.finditer(pattern, string, flags=0)
参数列表: pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式 功能:返回包含所有匹配项的跌迭代对象,其中每个匹配项都是match对象 re.sub(pat, repl, string, count=0)
参数列表: pat:匹配模式 repl:用于替换的字符串 string:被匹配的字符串 count:最多替换次数 功能:将字符串中的所有pat的匹配项用用repl替换,返回包含新字符串,repl可以是字符串或返回字符 串的可调用对象,改可调用对象作用于每个匹配的match对象 代码: import re
>> > text = "Dera {name}..."
>> > pat = '{name}'
>> > re. sub( pat, 'Mr.Dong' , text)
'Dear Mr.Dong...'
>> > s = 'It is a very good good idea'
>> > re. findall( r'(\b\w+) \1' , s)
[ 'good' ]
>> > re. sub( r'(\b\w+) \l' , r'\l' , s)
It is a very good idea
>> > re. sub( 'a' , lambda x: x. group( 0 ) . upper( ) , 'aaa abc abde' )
'AAA Abc Abde'
re.subn(pat, repl, string, count=0)
参数列表: pat:匹配模式 repl:用于替换的字符串 string:被匹配的字符串 count:最多替换次数 功能:将字符串中的所有pat的匹配项用用repl替换,返回包含新字符串和替换次数的二元数组,repl可以是字符串或返回字符 串的可调用对象,改可调用对象作用于每个匹配的match对象 代码: >> > re. subn( 'a' , 'dfg' , 'aaa abc avbde' )
( 'dfgdfgdfg dfgbc dfgvbde' , 5 )
2、正则表达式集锦
正则表达式 功能 ‘[pjc]ython’ 匹配’python’,‘jython’,‘cython’ [0-9a-zA-Z] 匹配任意大小写的字母和数字 [^abc] 匹配除’a’, ‘b’, ‘c’ 外的字符 'python perl’ 或’p(ython r’(http://)?(www.)?python.org’ 只能匹配’http://www.python.org’ 或’www.python.org’或’‘http://python.org’或’python.org’ ‘^http’ 只能匹配以"http"开头的字符串 (pattern)* 允许模式重复0次或多次 (pattern)+ 允许模式重复1次或多次 (pattern){m,n} 允许模式重复m-n次,注意痘后后面不要有空格 '(a b)*c’ ‘ab{1,}’ 等价于’ab+’ ,匹配以字母a开头后面紧跟一个或多个字母b的字符串 ‘^(\w){6,20}$’ 匹配长度为6-20的字符串,可以包含数字,字母,下划线 ‘^\d{1,3}.\d{1,3}\d{1,3}.\d{1,3}’ 检查给定的字符串是否为合格的IP地址格式 ‘^(13[4-9]\d{8})竖线(15[01289]\d{8})’ 检查给定的字符串是否为移动手机号码
3、match对象
主要方法:
group()-----------返回匹配的一个或多个子模式内容 groups()----------返回一个包含匹配所有子模式内容的元组 groupdict()-------返回包含匹配的所有命名子模式内容的字典 start()-------------返回指定子模式内容的起始位置 end()--------------返回指定子模式的结束位置的前一个位置 span()------------返回一个包含指定子模式内容其实位置和结束位置前一个未知的元组 括号中的参数传递是组对应的相对位置 代码:
>> > import re
>> > m = re. match( r'(\w+) (\w+)' , "Isaac Network,physocist" )
>> > m. group( 0 )
Isaac Network
>> > m. group( 1 )
Isaac
>> > m. group( 2 )
Network
m. grouop( 1 , 2 )
Isaac Network