python 中的正则详解

匹配单个的字符或者数字

 

匹配边界字符

 

 匹配一定个数的字符:  假设: x,y,z表示任意的字符, m,n表示正整数


正则表达式的贪婪模式与非贪婪模式:

贪婪模式:.*      .+    .?  {n,}(即匹配所有能匹配到的数据,直到最后一个不符合的返回)

非贪婪模式:.*?    .+?   {n} {n,m}(即匹配满足正则条件的匹配项,碰到第一个不符合的便返回)

flag:

re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)

re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)

re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为

re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定

re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性

re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

常用函数:

#返回pattern对象

res=re.compile(string[,flag])  # 配合各函数使用

result=res.match(string[, flags]) 等价于result=re.match(res,string[, flags])

result=res.search(string[, flags]) 等价于result=re.search(res,string[, flags])

result=res.split(string[, flags]) 等价于result=re.split(res,string[, flags])

result=res.findall(string[, flags]) 等价于result=re.findall(res,string[, flags])

result=res.finditer(string[, flags]) 等价于result=re.finditer(res,string[, flags])

result=res.sub(string[, flags]) 等价于result=re.sub(res,string[, flags])

result=res.subn(string[, flags]) 等价于result=re.subn(res,string[, flags])

#以下为匹配所用函数

result=re.match(pattern, string[, flags])

result=re.search(pattern, string[, flags])

 search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,

search()会寻找整个字符串, 查找匹配项, 返回第一个匹配项,

match()只有在开始位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。

result=re.split(pattern, string[, maxsplit])

按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

result=re.findall(pattern, string[, flags])

返回包含所有匹配子串的列表

result=re.finditer(pattern, string[, flags])

返回一个按照子串顺序访问每一个匹配结果(Match对象,需要通过group函数来获得其匹配的子串)的迭代器。可以通过for循环来获得所有的匹配结果,

result=re.sub(pattern, repl, string[, count])

使用repl替换string中每一个匹配的子串后返回替换后的字符串。

repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。

repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。

count用于指定最多替换次数,不指定时全部替换。

result=re.subn(pattern, repl, string[, count])

返回包含替换后的字符串和替换次数的元组,其他跟一样

猜你喜欢

转载自blog.csdn.net/qq_16069927/article/details/81038027