Bootstrap

Python中使用正则表达式.3

这里主要说一下贪婪匹配和非贪婪匹配

**贪婪匹配:**匹配尽可能多的字符; **非贪婪匹配:**匹配尽可能少的字符

python的正则匹配默认是贪婪匹配

例子:

\>>> re.match(r'^(\\w+)(\\d\*)$','abc123').groups()
('abc123', '')
\>>> re.match(r'^(\\w+?)(\\d\*)$','abc123').groups()
('abc', '123')  
  
表达式1:  
\\w+表示匹配字母或数字或下划线或汉字并重复1次或更多次;\\d\*表示匹配数字并重复0次或更多次。  
分组1(\\w)是贪婪匹配,它会在满足分组2(\\d\*)的情况下匹配尽可能多的字符(有点拗口),  
因为分组2(\\d\*)匹配0个数字也满足,所以分组1就把所有字符全部匹配掉了,分组2只能匹配空了。  
  
表达式2**在表达式后加个?即可进行非贪婪匹配**,如上面的(\\w+?),  
因为分组1进行非贪婪匹配,也就是满足分组2匹配的情况下,分组1尽可能少的匹配,  
这样的话,上面分组2(\\d\*)会把所有数字(123)都匹配,所以分组1匹配到(abc)  
;