You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Regex从长文本提取指定邮箱格式内容失败

正则提取含[!at]的邮箱内容解决方案

问题描述

需要从文本中提取包含[!at]的邮箱格式内容(如kaieldentsome [!at] gmail.com.),文本中不一定存在contact us at标识,此前使用的正则表达式未得到预期结果。

原代码问题分析

原正则(?<=\s).*?\s\[!at\].*?\s.*?\s存在两处关键问题:

  • 强制要求[!at]前后及结尾必须有空格,但目标内容结尾是.无空格,导致匹配失败
  • 泛用的.*?会匹配多余无关内容,无法精准定位目标序列

修正后的正则与代码

使用无需依赖前置标识的精准正则,匹配包含[!at]的完整邮箱块:

import re

item_str = 'If you have any questions or concerns, you may contact us at kaieldentsome [!at] gmail.com. You can also follow us on fb'
# 匹配规则:锁定包含[!at]的完整块,前后为空白或文本首尾
output = re.findall(r'(?<!\S).*?\[!at\].*?(?=\s|$)', item_str)[0]
print(output)

正则规则说明

  • (?<!\S):断言匹配内容的前一个字符是空白或文本开头,确保从邮箱块的起始位置开始匹配
  • .*?\[!at\].*?:非贪婪匹配包含[!at]的所有内容
  • (?=\s|$):断言匹配内容的后一个字符是空白或文本结尾,确保匹配到邮箱块的完整结尾(包括末尾的.)

执行后输出:

kaieldentsome [!at] gmail.com.

更健壮的适配版本

如果邮箱的用户名或域名可能包含除空格外的特殊字符,可使用更精准的规则:

output = re.findall(r'\S+\s\[!at\]\s\S+\.?', item_str)[0]
  • \S+:匹配非空白字符序列(覆盖用户名和域名部分)
  • \s\[!at\]\s:精准匹配[!at]前后的空格分隔符
  • \.?:匹配可选的结尾.

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:06:32