请教关于规则表达式

请教关于规则表达式

>>> tt=re.search('\w+@\w+(\.\w+)+','the afjawe@afahehf.com.cn   fefef')
>>> tt.group()
'afjawe@afahehf.com.cn'
>>> tt=re.findall('\w+@\w+(\.\w+)+','the afjawe@afahehf.com.cn   fefef')
>>> tt
['.cn']



用re.search可以找到匹配, 怎么用re.findall只能返回['.cn']呢,郁闷!  请高人指点一下,谢谢!
tt=re.search('\w+@\w+(\.\w+)+','the afjawe@afahehf.com.cn   fefef')

这个返回group里面有俩个。你输出tt.group(0)和tt.group(1)看看就知道了。0是大匹配,1是大匹配里面小的。

你再试试:tt=re.findall('(\w+@\w+(\.\w+)+)','the afjawe@afahehf.com.cn   fefef')
再输出tt,就可以看到列表有2个结果了。

这个地方还是你的正则有点问题哦。呵呵。

非常感谢,!
不过我不明白为什么
tt=re.findall('\w+@\w+(\.\w+)+','the afjawe@afahehf.com.cn   fefef')
就不行呢,返回的是'.cn'。一定得在全部的表达式上加括号。这样返回的是2个匹配的列表,第二个多余。

或者有什么更好的匹配电子邮件的方法?
你需求匹配到什么呢?
>>> tt=re.findall('\w+@\w+\.\w+','the afjawe@afahehf.com.cn   fefef')
>>> tt
['afjawe@afahehf.com']
任意电子邮件地址
xxx@xxxxx.xxx.xxx.xx
返回子匹配列表,findall 就是这样设计的。

QUOTE:
>>> print re.findall('(\w+@\w+(\.\w+)+)','t ae@af.com.cn kk@kkk.kk   fefef')
[('ae@af.com.cn', '.cn'), ('kk@kkk.kk', '.kk')]

自己把需要的部分提取出来就可以了。
比如这样:

QUOTE:
map(lambda x:x[0], re.findall('(\w+@\w+(\.\w+)+)','t ae@af.com.cn kk@kkk.kk   fefef'))

['ae@af.com.cn', 'kk@kkk.kk']

hehe,你用得真巧妙,
我还老老实实用for提取的,哈哈
多谢了