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

如何用Python/正则/Excel分离中英混杂词汇并生成分栏对照表

问题描述
  • 待处理对象为存储中英混杂专业词汇的纯文本文件,词条以空格为分隔符,原始文本示例:
    Above Ground 地面上 AG Abutment 橋臺 ABUT Acceptance Quality Level 可接受品質水準 AQL Acoustical 隔音 ACOUS Adit 隧道橫坑 Advanced Shoring Method 支撐先進工法
  • 词条结构规则:基础结构为「英文词条+中文词条」,部分词条在中文后附带全大写英文缩写,单条词条参考:Abutment 橋臺 ABUT
  • 处理目标:将所有词条整理为英文、中文各占一列的两列表格。
  • 现有尝试:最初计划使用numpy、正则表达式实现需求,同时希望了解Excel类无代码的简便替代方案;自行编写的正则代码运行报错,代码如下:
import re

path = 'wordlist.txt'
file = open(path, "r")
result = re.match(r"([\u4e00-\u9fa5]*)([A-Za-z\s]*)", file)
print(result.group(1)) 
print(result.group(2)) 
  • 报错信息:
Traceback (most recent call last):
  File "c:\Users\...\Desktop\web dev\parsetextforQuizlet\sepretatchiEng.py", line 5, in <module>
    result = re.match(r"([\u4e00-\u9fa5]*)([A-Za-z\s]*)", file)
  File "C:\Users\...\AppData\Local\Programs\Python\Python39\lib\re.py", line 191, in match
    return _compile(pattern, flags).match(string)
TypeError: expected string or bytes-like object
报错原因
  1. 类型错误:re.match 方法要求传入字符串/字节类型参数,代码直接传入了open()返回的文件对象,未调用read()方法读取文件实际内容,触发类型校验失败。
  2. 正则逻辑错误:编写的匹配规则顺序为「先匹配中文、再匹配英文」,和实际词条「英文在前、中文在后」的结构完全相反;同时未处理多词英文、繁体中文、可选缩写的边界,即使修复类型错误也无法正确拆分词条。
可行实现方案

方案1:Python正则实现(无额外依赖)

代码适配原始文本的「英-中-可选缩写」循环结构,运行后可直接打印markdown格式表格,也可导出为UTF-8编码的CSV文件直接用Excel打开,无乱码问题:

import re
import csv

# 读取文件内容,若文件为繁体中文big5编码可将encoding替换为'big5'
with open('wordlist.txt', 'r', encoding='utf-8') as f:
    content = f.read().strip()

# 正则规则说明:
# 1. 匹配英文词条:以大写英文字母开头,由大小写英文、空格组成,非贪婪匹配到中文前截止
# 2. 匹配中文词条:匹配所有繁体/简体中文字符
# 3. 匹配可选缩写:中文后0或1组2-5位长度的全大写英文
# 4. 正向预查:缩写后必须接下一个大写开头的英文词条,或到达文本末尾,避免匹配错位
pattern = re.compile(
    r'([A-Z][A-Za-z\s]*?)\s*([\u4e00-\u9fff]+)\s*([A-Z]{2,5})?(?=\s+[A-Z]|\s*$)'
)
matches = pattern.findall(content)

# 整理词条,缩写附在英文词条后
word_list = []
for eng, chn, abbr in matches:
    eng_clean = eng.strip()
    if abbr:
        eng_clean = f"{eng_clean} ({abbr})"
    word_list.append( (eng_clean, chn.strip()) )

# 打印markdown表格
print("| 英文词条 | 中文释义 |")
print("|----------|----------|")
for eng, chn in word_list:
    print(f"| {eng} | {chn} |")

# 导出为CSV文件(供Excel使用),取消下方注释即可
# with open('词汇表结果.csv', 'w', encoding='utf-8-sig', newline='') as f:
#     writer = csv.writer(f)
#     writer.writerow(["英文词条", "中文释义"])
#     writer.writerows(word_list)

针对给出的示例文本,运行后输出结果为:

英文词条中文释义
Above Ground (AG)地面上
Abutment (ABUT)橋臺
Acceptance Quality Level (AQL)可接受品質水準
Acoustical (ACOUS)隔音
Adit隧道橫坑
Advanced Shoring Method支撐先進工法

方案2:Excel无代码实现

不需要写脚本,直接用Excel公式即可完成拆分,步骤如下:

  1. 将原始文本拆分到A列,每行对应一个完整词条块。
  2. 提取中文:在B1单元格输入公式 =TEXTJOIN("",TRUE,IF(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)>"z",MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"")),365/2021及以上版本Excel直接回车,旧版Excel按Ctrl+Shift+Enter确认数组公式,即可提取单元格内所有中文字符。
  3. 提取英文(含缩写):在C1单元格输入公式 =TRIM(SUBSTITUTE(A1,B1,"")),即可剔除中文内容,得到清理后的英文+缩写部分。
  4. 选中B1、C1单元格下拉填充所有行,复制B、C列后粘贴为值,删除多余列即可得到最终两列表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:27