搬马

导航

 

贪婪匹配

贪婪匹配是指字符后面是*+?的时候,都是尽可能多的匹配,如果不想尽可能多的匹配,那么在这三个字符后面加?号即可,这样变成惰性匹配,按最少匹配。

ret = re.findall('ab??','dfaabbbdwofj')

print(ret)  #['a', 'a']

 

\d  匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#等

注意:以前这些只能用来匹配单个字符,如果想匹配多个,后面要加适当的元字符

ret = re.findall('\d','dfaabbbdwof123j')
print(ret)  #['1', '2', '3']

ret = re.findall('\d{3}','dfaabbbdwof123j')
print(ret)  #['123']

ret = re.findall('\d+','dfaabbbdwof123j')
print(ret)  #['123']

ret = re.findall('\d*','dfaabbbdwof123j')
print(ret)  #['', '', '', '', '', '', '', '', '', '', '', '123', '', '']

 

分组( )

ret = re.search('(ab)(ty)','erwabtyyy')
print(ret.group())  #abty
#search返回的是匹配到的整个字符

ret = re.search('(ab)/(ty)*','erwab/tytyy')
print(ret.group())  #ab/tyty
#再次证明search返回的是匹配到的整个字符

ret = re.findall('(ab)(ty)+','erwabtyfewwpabtytyab')
print(ret)  #[('ab', 'ty'), ('ab', 'ty')]    为什么后面有元字符+,却不匹配后面一个ty???
#findall默认只返回分组匹配到的字符,并且每个分组匹配到的字符用逗号隔开放在一个元组里面,作为一个整体

ret = re.findall('(ab)/(ty)+','erwabtyfewwpab/tytyab')
print(ret)  #[('ab', 'ty')]
#再次证明findall默认只返回分组匹配到的字符,匹配规则中的其它字符不显示。

ret = re.findall('(?:ab)/(?:ty)+','erwabtyfewwpab/tytyab')
print(ret)  #['ab/tyty']  里面不再是一个元组了
#如果想让findall返回整个规则匹配到的所有内容,在小括号中加上?:即可,此时返回的就是所有内容。

#猜测:上面findall中(ty)后面的+没用可能是,这个元组不存储相同的元素。

 

posted on 2018-02-23 14:00  搬马  阅读(107)  评论(0编辑  收藏  举报