贪婪匹配
贪婪匹配是指字符后面是*+?的时候,都是尽可能多的匹配,如果不想尽可能多的匹配,那么在这三个字符后面加?号即可,这样变成惰性匹配,按最少匹配。
ret = re.findall('ab??','dfaabbbdwofj') print(ret) #['a', 'a']
d 匹配任何十进制数;它相当于类 [0-9]。
D 匹配任何非数字字符;它相当于类 [^0-9]。
s 匹配任何空白字符;它相当于类 [
fv]。
S 匹配任何非空白字符;它相当于类 [^
fv]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格 ,&,#等
注意:以前这些只能用来匹配单个字符,如果想匹配多个,后面要加适当的元字符
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)后面的+没用可能是,这个元组不存储相同的元素。