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

如何修改正则表达式提取邮件签名中指定类型的单行电话号码

解决方案

问题1:强制号码在同一行匹配

原正则中的[\s.-]会匹配换行符(\s包含换行、空格、制表符等),导致跨换行拼接内容。只需将所有\s替换为仅匹配空格和制表符的[ \t],即可避免跨行匹配:

修复后的基础号码正则:

(?<![%_])\b(\+?\d{1,}[ \t.-]?\(?\d{1,}\)?[ \t.-]?\(?\d{1,}\)?[ \t.-]?\d{1,}[ \t.-]?\d{1,}[ \t.-]?\d{3,})

修改后,正则只会在同一行内匹配连续的号码格式,不会把上一行的末尾数字(如邮编19073)和下一行的号码错误拼接。

问题2:按号码类型提取(以Mobile/Cell为例)

针对带前缀的号码,需要先匹配各种大小写、格式的前缀,再捕获后续号码。使用(?i)开启忽略大小写模式,覆盖所有前缀变体:

匹配Mobile/Cell号码的正则:

(?i)(?:\(?M\)?[: ]|Mobile[: ]|Cell[: ])\s*(?<![%_])\b(\+?\d{1,}[ \t.-]?\(?\d{1,}\)?[ \t.-]?\(?\d{1,}\)?[ \t.-]?\d{1,}[ \t.-]?\d{1,}[ \t.-]?\d{3,})

前缀部分说明:

  • (?i):忽略大小写,匹配M/m、Mobile/mobile、Cell/cell等格式
  • \(?M\)?:匹配带或不带括号的单字母前缀,如M、(M)
  • [: ]:匹配前缀后的冒号或空格,支持M:、M 、(M):等格式
  • \s*:匹配前缀与号码之间的任意空白(包括无空白的情况,如M:360.123.1471)

适配其他类型(如Fax/Office)

只需修改前缀部分即可,比如匹配Fax的正则:

(?i)(?:\(?F\)?[: ]|Fax[: ])\s*(?<![%_])\b(\+?\d{1,}[ \t.-]?\(?\d{1,}\)?[ \t.-]?\(?\d{1,}\)?[ \t.-]?\d{1,}[ \t.-]?\d{1,}[ \t.-]?\d{3,})

内容的提问来源于stack exchange,提问作者sagi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:15:47