本文目录导读:

- Python 正则表达式(最常用)
- Python 处理复杂格式
- 命令行 Grep 方式
- JavaScript 提取
- PowerShell 脚本(Windows)
- 批量处理多个文件
- 增强版处理(支持更多格式)
- 使用建议
我来介绍几种提取手机号的脚本方法,根据不同需求选择适合的方案:
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)
使用建议
- 小规模处理:直接用 Python 脚本或 grep 命令
- 大批量文件:使用 Python 批量处理脚本
- 网页数据:使用 JavaScript 或 Python + BeautifulSoup
- 数据清洗:提取后建议去重和格式统一
需要我详细说明某个具体场景的用法吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播