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

混合数字与拼写数字的电话号码识别及正则方案问询

混合数字格式电话号码的提取与DataFrame筛选方案

一、修正后的正则表达式

针对混合阿拉伯数字(0-9)与英文数字单词(zero-nine)的电话号码,比如+89 one5zero 77three3、+eight2three 555 seven21这类格式,可用以下正则表达式匹配:

import re

# 编译正则,忽略大小写适配不同写法的英文数字
phone_pattern = re.compile(
    r'(?<!\S)\+?(?:(?:\d|zero|one|two|three|four|five|six|seven|eight|nine)+(?:\s+|$))+',
    re.IGNORECASE
)

正则逻辑说明:

  • (?<!\S):确保匹配内容的开头是空白或字符串起始,避免从其他单词中间截取
  • \+?:匹配可选的国际区号前缀+
  • (?:\d|zero|one|nine)+:匹配任意长度的阿拉伯数字与英文数字的混合块(比如one5zero、77three3这类组合)
  • (?:\s+|$):匹配块之间的空格分隔,或字符串结尾
  • re.IGNORECASE:兼容Zero、ONE这类大小写混合的英文数字写法

二、从文本中提取目标号码

用findall方法可直接提取文本中所有符合模式的内容:

sample_text = "联系电话:+89 one5zero 77three3,备用号:+eight2three 555 seven21"
matches = phone_pattern.findall(sample_text)
# 输出:['+89 one5zero 77three3', '+eight2three 555 seven21']

三、筛选DataFrame中包含目标模式的行

假设你的DataFrame有一列名为content存储待检测文本,可用str.contains快速筛选:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'content': [
        "客户电话:+89 one5zero 77three3",
        "普通文本,无特殊号码",
        "备用联系方式:+eight2three 555 seven21"
    ]
})

# 筛选包含目标号码的行
filtered_df = df[df['content'].str.contains(phone_pattern, na=False)]

四、原正则的问题说明

你之前的正则效果不佳,主要是两个原因:

  1. 用\b作为边界,但+不属于单词边界字符,导致带+前缀的号码无法匹配
  2. 分组逻辑是单独匹配单个数字或英文单词,无法处理one5zero这种阿拉伯数字与英文混合在同一块的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:50:32