Python正则r'\s+'与r'(\s+)'的区别
伊谢尔伦
伊谢尔伦 2017-04-17 11:54:42
[Python讨论组]

上代码:

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']

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
巴扎黑

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

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

>>> 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']
ringa_lee

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.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号