Python正则表达式re.split分组捕获行为解析
本文通过Python中re.split函数的实际运行结果,解析了正则表达式中括号分组对匹配结果的影响。当使用带括号的模式如'(\W+)'时,分组内的匹配内容会被单独提取并保留在返回列表中,导致非单词字符出现在结果里。对比无括号模式可知,这是正则表达式标准行为,旨在允许用户获取分隔符信息。
本文通过具体案例解析Python中正则表达式的基础用法,供读者参考。
此前在一个公司内部由UED成员组成的Python爱好者小群里,有位资深开发者分享了一条测试信息。
该测试包含一个小型代码示例。
re.split('(\W+)', ' test, test, test.')
问题是该代码执行后返回的具体结果是什么。
初次观察时,我并未注意到正则中的W是大写形式,误以为是小写w,后者通常代表单词字符(包括下划线)。直到实际运行代码后,才确认使用的是大写W。
在IDLE环境中执行该代码,得到的输出如下所示。
>>> import re
>>> re.split('(\W+)', ' test, test, test.')
['', ' ', 'test', ', ', 'test', ', ', 'test', '.', '']
>>>
观察上述输出结果,我产生了疑问:既然\W用于匹配非单词字符,为何最终结果中会包含大量看似非单词的字符片段?
起初我怀疑自己记错了\W的定义,查阅正则表达式手册确认无误后,我注意到该测试用例中的匹配模式包含了括号结构,即正则语法中的(pattern)形式。
这种带有括号的写法表示在匹配的同时,会将括号内匹配到的内容提取出来,并保存到匹配结果集合中。
至此问题豁然开朗。
为进一步验证,我进行了额外的测试。
>>> re.split('(\W+)', ' test, test, test.')
['', ' ', 'test', ', ', 'test', ', ', 'test', '.', '']
>>> re.split('\W+', ' test, test, test.')
['', 'test', 'test', 'test', '']
>>>
此外,这里推荐两款实用的正则表达式在线工具供参考:
JavaScript正则表达式在线测试工具: http://tools.jb51.net/regex/javascript
正则表达式在线生成工具: http://tools.jb51.net/regex/create_reg
如需了解更多Python相关知识,可查阅本站相关专题,包括《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。
希望本文的解析对大家的Python编程实践有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













