Python正则表达式中使用findall函数遇到括号嵌套的小坑 |
您所在的位置:网站首页 › 函数大括号小括号 › Python正则表达式中使用findall函数遇到括号嵌套的小坑 |
1.findall函数
我们都知道括号在正则表达式中起到了分类的作用,但当定义好一个自己的字符匹配模式(含有括号)后,使用findall()函数会遇到一点小坑。 具体来说就是: 可以发现是否将整个正则表达式用括号括起来会影响findall的返回结果。 如果有括号括,则返回元组的第0项是匹配到的整个字符串’abcde’如果没有,则返回元组的第0项就是第一对括号’bc’并且当存在多层括号嵌套时,各组的排序遵循从左到右,从外到内的原则。即对于正则表达式(a(bc)((d)(e))),'abcde’是第0组,'bc’是第1组,'de’是第2组,'d’是第3组,而’e’则是第4组。 2.findall与search读到这边你可能会有疑惑,这不是很合理的设定吗,哪里“坑了”?这就不得不提高正则表达式中经常会用到的search函数,如果你定义了上文中那个没有用括号整个括起来的正则表达式: tt = re.compile(r'a(bc)((d)(e))')再调用search函数,就会发现问题所在: 我们发现即使没有括号括起整个正则表达式,search(‘abcde’).group(0)返回的仍然是整个字符串,group(1)才是定义好的“第一组”,这与findall函数所得到的结果是不同的,在实际使用中必须要区分search函数与findall函数的区别!!! 注:groups()函数总是返回整个字符串,注意区分group()与groups() 如果定义的下面这种呢: tt = re.compile(r'(a(bc)((d)(e)))')你会发现自己多此一举了,group(0)与group(1)都会返回整个字符串: 总结一下,即: 有几对括号,findall函数就分几组,排列顺序遵循从左到右,由外到内,想要把整个字符串作为元组的一项,就给整个正则表达式套括号search返回对象的group(0)总是整个字符串,然后才是相应的组,所以不必多次一举给整个正则表达式套括号。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |