python中的正则表达式中的 "|"

2025-03-10 10:15:22
推荐回答(3个)
回答1:

Python中re.findall()函数是要求正则表达式在捕获第0组数据时,要在正则表达式上加小括号才能捕获.

也就是说如果你要获取整个正则表达式匹配的数据(你这里是电子邮箱地址),需要在正则表达式外面加小括号,

然后取第0捕获组的数据(你这里是[x[0] for x in zhengze]),

因为findall函数把每一个匹配的多个捕获组(就是你正则表达式中的小括号中)的数据放到一个元组里,所以要用for循环把第0捕获组的数据取出来.

具体程序改进如下

>>>zhengze=re.findall("([A-Za-z0-9]+@(163|qq|gmail)\.com)",txt)

>>>[x[0] for x in zhengze]

结果就是你要的邮箱列表了.

回答2:

你要的代码:

import re

emailStr = "abc123@163.com xxx 456def@qq.com yyy 789ghi@gmail.com"

allEmailList = re.findall("([a-zA-Z0-9]+@(?:163|qq|gmail)\.com)", emailStr) # ['abc123@163.com', '456def@qq.com', '789ghi@gmail.com']

print(allEmailList)


中间过程的代码:

# allEmailList = re.findall("[a-zA-Z0-9]@(163|qq|gmail)\.com", emailStr) # ['163', 'qq', 'gmail']

# allEmailList = re.findall("([a-zA-Z0-9]+@(163|qq|gmail)\.com)", emailStr) # [('abc123@163.com', '163'), ('456def@qq.com', 'qq'), ('789ghi@gmail.com', 'gmail')]

# allEmailList = re.finditer("([a-zA-Z0-9]+@(163|qq|gmail)\.com)", emailStr) #

附录:

回答3:

(?:163|qq) 可以这样写,则只匹配而不产生分组