如何用脚本提取文中手机号

wen 实用脚本 2

本文目录导读:

如何用脚本提取文中手机号

  1. Python 正则表达式(最常用)
  2. Python 处理复杂格式
  3. 命令行 Grep 方式
  4. JavaScript 提取
  5. PowerShell 脚本(Windows)
  6. 批量处理多个文件
  7. 增强版处理(支持更多格式)
  8. 使用建议

我来介绍几种提取手机号的脚本方法,根据不同需求选择适合的方案:

Python 正则表达式(最常用)

import re
def extract_phones(text):
    # 匹配中国大陆手机号(1开头的11位数字)
    pattern = r'1[3-9]\d{9}'
    # 如果文本中有分隔符(如-、空格等)
    # pattern = r'1[3-9][\s-]?\d{4}[\s-]?\d{4}'
    phones = re.findall(pattern, text)
    return phones
# 使用示例
text = """
联系人:张三 13812345678
李四:139-1234-5678
王五:138 1234 5678
固定电话:010-12345678
"""
phones = extract_phones(text)
print(phones)  # ['13812345678', '13912345678', '13812345678']

Python 处理复杂格式

import re
def extract_phones_advanced(text):
    # 更复杂的匹配,处理各种分隔符
    pattern = r'(?<!\d)1[3-9]\d{9}(?!\d)|(?<!\d)1[3-9][-\s]?\d{4}[-\s]?\d{4}(?!\d)'
    phones = set()  # 使用set去重
    for match in re.finditer(pattern, text):
        phone = match.group()
        # 清理格式
        phone = re.sub(r'[-\s]', '', phone)
        phones.add(phone)
    return list(phones)
# 从文件读取
with open('contacts.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    phones = extract_phones_advanced(content)
    for phone in phones:
        print(phone)

命令行 Grep 方式

# 使用grep提取手机号
grep -oE '1[3-9][0-9]{9}' 文件名.txt
# 处理带分隔符的
grep -oE '1[3-9][0-9-]{10,13}' 文件名.txt | sed 's/-//g'
# 递归搜索文件夹中所有txt文件
grep -roE '1[3-9][0-9]{9}' *.txt

JavaScript 提取

// 浏览器控制台或Node.js中使用
function extractPhones(text) {
    // 匹配手机号(支持各种格式)
    const pattern = /(?:\+?86)?1[3-9]\d{9}/g;
    // 如果有分隔符
    // const pattern = /1[3-9][\d\s-]{10,13}/g;
    const phones = text.match(pattern) || [];
    // 清理格式
    return phones.map(phone => {
        return phone.replace(/[\s-]/g, '');
    });
}
// 从网页中提取
const text = document.body.innerText;
const phones = extractPhones(text);
console.log(phones);

PowerShell 脚本(Windows)

# 从文件提取手机号
$content = Get-Content "contacts.txt" -Raw
$pattern = '1[3-9]\d{9}'
$phones = [regex]::Matches($content, $pattern) | ForEach-Object { $_.Value }
$phones | Get-Unique | Set-Content "phones.txt"

批量处理多个文件

import os
import re
def batch_extract_phones(folder_path):
    all_phones = set()
    pattern = r'1[3-9]\d{9}'
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith(('.txt', '.csv', '.html')):
                file_path = os.path.join(root, file)
                try:
                    with open(file_path, 'r', encoding='utf-8') as f:
                        content = f.read()
                        phones = re.findall(pattern, content)
                        all_phones.update(phones)
                except:
                    continue
    # 保存到文件
    with open('所有手机号.txt', 'w') as f:
        for phone in all_phones:
            f.write(phone + '\n')
    return list(all_phones)
# 使用
phones = batch_extract_phones('文档目录/')

增强版处理(支持更多格式)

import re
def extract_all_phone_formats(text):
    # 支持带国家码的
    patterns = [
        r'\+?86[-\s]?1[3-9]\d{9}',  # +86或86开头
        r'1[3-9]\d{9}',              # 纯11位
        r'1[3-9][-\s]?\d{4}[-\s]?\d{4}',  # 带分隔符
        r'\(?0\d{2,3}\)?[-\s]?\d{7,8}'  # 固定电话
    ]
    phones = {}
    results = []
    for pattern in patterns:
        matches = re.findall(pattern, text)
        for phone in matches:
            # 标准化处理
            cleaned = re.sub(r'[\s\(\)\-]', '', phone)
            if cleaned.isdigit():
                results.append(cleaned)
    return list(set(results))
# 使用
text = "手机:+86 138-1234-5678,固话:0755-88886666"
phones = extract_all_phone_formats(text)

使用建议

  1. 小规模处理:直接用 Python 脚本或 grep 命令
  2. 大批量文件:使用 Python 批量处理脚本
  3. 网页数据:使用 JavaScript 或 Python + BeautifulSoup
  4. 数据清洗:提取后建议去重和格式统一

需要我详细说明某个具体场景的用法吗?

抱歉,评论功能暂时关闭!