玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python正则匹配r'\s+'与r'(\s+)'两种方法有何不同

上代码:

import re
s = 'a b c d e'
re.split(r'\s+', s)      # 结果: ['a', 'b', 'c', 'd', 'e']
re.split(r'(\s+)', s)    # 结果: ['a', ' ', 'b', ' ', 'c', ' ', 'd', ' ', 'e']

感觉与正则引擎规则有关.这其中差别的原因到底是因为什么?求指教.

http://docs.python.org/2/library/re.html#re.split

If capturing parentheses are used in pattern, then the text of all groups in the pattern are also returned as part of the resulting list.

如评论所说,看过文档了你还问?!

再来一个例子,可以帮助更好的理解这个问题:

>>> s = 'a12b12c'
>>> re.split(r'(1)(2)', s)
['a', '1', '2', 'b', '1', '2', 'c']
>>> re.split(r'((1)(2))', s)
['a', '12', '1', '2', 'b', '12', '1', '2', 'c']

如果你的正则表达式中确实必须使用括号,但又不想把括号匹配到的部分包含在结果当中,记得使用非捕获分组(non-capturing group)的语法:

>>> re.split(r'(?:1)(2)', s)
['a', '2', 'b', '2', 'c']

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19938.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月22日 - 09时13分04秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules