Python使用Regex findall提取固定文本后字符串的问题求助
解决方案:提取所有符合要求的邮箱内容
问题分析
你当前的代码仅通过单次split操作只能获取第一个匹配结果,要提取全部目标内容,需要遍历所有符合格式的行,或用正则表达式批量匹配。
方法一:逐行处理字符串
先将文本按行拆分,过滤空行后对每一行单独做分割处理:
lines = ''' Email: promo@madeup.com Email: dave@madeup.com Email: john@madeup.com ''' # 去除首尾空白并按换行分割成列表 for line in lines.strip().split('\n'): line = line.strip() if not line: continue # 先分割掉开头的"Email: ",再分割掉结尾的".com" email_part = line.split('Email: ')[1].split('.com')[0] print(email_part)
运行输出:
promo@madeup dave@madeup john@madeup
方法二:使用正则表达式(推荐)
正则表达式可以一次性匹配所有符合格式的内容,代码更简洁高效,尤其适合处理复杂文本场景:
import re lines = ''' Email: promo@madeup.com Email: dave@madeup.com Email: john@madeup.com ''' # 匹配"Email: "和".com"之间的所有内容 results = re.findall(r'Email: (.*?)\.com', lines) # 遍历输出所有结果 for res in results: print(res)
运行结果与方法一一致。其中正则表达式r'Email: (.*?)\.com'的作用:
(.*?)是非贪婪捕获组,精准匹配Email:之后到.com之前的内容re.findall会返回所有匹配到的字符串组成的列表
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

