re模块的方法

Zss 发表于:

一.re.findall()

re.finall(模式,字符串,标记=0)

查找字符串中所有匹配的字符,返回一个列表
如果模式中存在一个或多个捕获组,则返回一个组列表
如果模式有多个组,这将是一个元组列表
结果中包含空匹配项。
In[9]: a = 'dasd123@qq.comsfdasaaa@163.combbb@126.comdafas'

In[10]: print re.findall(r'\w+@(qq|163|126)\.com', a)
['qq', '163', '126']

In[11]: print re.findall(r'(\w+@(qq|163|126)\.com)', a)
[('dasd123@qq.com', 'qq'), ('sfdasaaa@163.com', '163'), ('bbb@126.com', '126')]

In[12]: print re.findall(r'(\w+@qq|163|126\.com)', a)
['dasd123@qq', '163', '126.com']

In[13]: print re.findall(r'\w+@qq|163|126\.com', a)
['dasd123@qq', '163', '126.com']

In[14]: print re.findall(r'(\w+@(?:qq|163|126)\.com)', a)
['dasd123@qq.com', 'sfdasaaa@163.com', 'bbb@126.com']

In[15]: print re.findall(r'\w+@(?:qq|163|126)\.com', a)
['dasd123@qq.com', 'sfdasaaa@163.com', 'bbb@126.com']

 

二.re.compile(pattern, flags = 0) 

将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果

这是一种方法

In [19]: a
Out[19]: 'dasd123@qq.comsfdasaaa@163.combbb@126.comdafas'

In [20]: rule = re.compile(r'\w+@(?:qq|163|126)\.com')

In [21]: print rule.findall(a)
['dasd123@qq.com', 'sfdasaaa@163.com', 'bbb@126.com']

或者

In [22]: a
Out[22]: 'dasd123@qq.comsfdasaaa@163.combbb@126.comdafas'

In [23]: rule = re.compile(r'\w+@(?:qq|163|126)\.com')

In [24]: print re.findall(rule,a)
['dasd123@qq.com', 'sfdasaaa@163.com', 'bbb@126.com']

但是我每次使用都是没使用到re.compile,直接使用re.findall(r‘’规则“,需要匹配的文本),这样子也可以

但是我想这样的效率应该是没有使用re.compile高吧

 

三.re.match(pattern, string, flags = 0)

在字符串的起始位置来匹配

当匹配到第一个之后就不会再匹配了,返回对象,返回MatchObject(True),使用group(1)来查看

当未匹配到则返回None

regex = '(foo\w)(\w)'
m = re.match(r'(foo\w)(\w)','fooasdfooasd')
if m is not None:
    print(m.group(1))
    print(m.groups())
#输出
#fooa
#('fooa', 's')