day18:正则表达式、re模块

正则表达式:用来做字符串匹配

贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

几个常用的非贪婪匹配:

*?     重复任意次,但尽可能少重复
+?     重复1次或更多次,但尽可能少重复
??     重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?      重复n次以上,但尽可能少重复     
.*?的用法
.   是任意字符
*   是取 0 至 无限长度
?   是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用法为
.
*?x 就是取前面任意长度的字符,直到一个x出现

 re模块下的常用方法

findall    返回所有满足匹配条件的结果,放在列表里

ret = re.findall("[a-z]+", "ppd max zxc")
print(ret)  
#['ppd', 'max', 'zxc']

finditer    用法同findall,返回迭代器    
search    从前往后找,找到一个就返回,返回的变量需要调用group才能拿到结果
          如果没有找到,那么返回None,调用group会报错

ret = re.search("zx", "ppd max zxc")
if ret:
    print(ret.group())  #zx            
match    从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量;
      匹配的内容需要用group才能显示;
         如果没匹配上,就返回None,调用group会报错

ret = re.match("pp", "ppd max zxc")
if ret:
    print(ret.group())  #pp
ret = re.split("[ab]", "abcd")  先按a分割得到""和"bcd",再对""和"bcd"分别按b分割
print(ret) 
# ['', '', 'cd']
ret = re.sub("\d", "H", "ppd123ma45zxc", 1)  将数字替换成 H ,参数1表示只替换1个
print(ret)  
#ppdH23ma45zxc
ret = re.subn("\d", "H", "ppd123ma45zxc")  将数字替换成 H ,返回元组(替换的结果,替换了多少次)
print(ret)  
#('ppdHHHmaHHzxc', 5)
#当正则规则较长且经常被使用的时候,使用compile

obj = re.compile("\d{2}")    将正则表达式编译成为一个"正则表达式对象", 匹配的是3个数字
ret = obj.search("abc123qwer")  正则表达式对象调用search,参数为待匹配的字符串
print(ret.group())  
#12
 

猜你喜欢

转载自www.cnblogs.com/believepd/p/9614378.html