'[ab]+' 是否等于 python re 模块中的 '(a|b)+'? [英] Does '[ab]+' equal '(a|b)+' in python re module?

查看:52
本文介绍了'[ab]+' 是否等于 python re 模块中的 '(a|b)+'?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我认为 pat1 = '[ab]' 和 pat2 = 'a|b' 在 Python(python2.7, windows) 're' 模块中具有与正则表达式模式相同的功能.但是我对'[ab]+'和'(a|b)+'感到困惑,它们的功能是否相同,如果没有,请详细说明.

I think pat1 = '[ab]' and pat2 = 'a|b' have the same function in Python(python2.7, windows) 're' module as a regular expression pattern. But I am confused with '[ab]+' and '(a|b)+', do they have the same function, if not can you explain details.

'''
Created on 2012-9-4

@author: melo
'''

import re
pat1 = '(a|b)+'
pat2 = '[ab]+'
text = '22ababbbaa33aaa44b55bb66abaa77babab88'

m1 = re.search(pat1, text)
m2 = re.search(pat2, text)
print 'search with pat1:', m1.group()
print 'search with pat2:', m2.group()

m11 = re.split(pat1, text)
m22 = re.split(pat2, text)
print 'split with pat1:', m11
print 'split with pat2:', m22

m111 = re.findall(pat1, text)
m222 = re.findall(pat2, text)
print 'findall with pat1:', m111
print 'findall with pat2:', m222

输出如下:

search with pat1: ababbbaa
search with pat2: ababbbaa
split with pat1: ['22', 'a', '33', 'a', '44', 'b', '55', 'b', '66', 'a', '77', 'b', '88']
split with pat2: ['22', '33', '44', '55', '66', '77', '88']
findall with pat1: ['a', 'a', 'b', 'b', 'a', 'b']
findall with pat2: ['ababbbaa', 'aaa', 'b', 'bb', 'abaa', 'babab']

为什么pat1"和pat2"不同,它们的区别是什么?'pat1' 实际可以匹配什么样的字符串?

why are 'pat1' and 'pat2' different and what's their difference? what kind of strings can 'pat1' actually match?

推荐答案

您在第一个模式中有一个捕获组.

You have a capturing group in the first pattern.

根据文档

re.split()
... 如果在 pattern 中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回....

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. ...

尝试让群组不被捕获,看看是否达到了预期:

Try making the group non-capturing and see if you get what you expect:

pat1 = '(?:a|b)+'

这篇关于'[ab]+' 是否等于 python re 模块中的 '(a|b)+'?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆