寻求单一正则表达式高效处理维基百科转储文本的方案
解决方案
核心思路
先精准捕获目标句子(从Paul开头到philologue结尾的第一句话),再对句子内的各类维基格式做批量转换,比强行用单一正则处理整个文本更高效、易维护。
具体实现(以Python为例)
1. 捕获目标句子
用正则匹配跳过前面的信息框,直接提取第一句话:
'''Paul.*?philologue\.
(开启re.DOTALL模式,确保.能匹配换行,示例中句子是单行,实际场景中开启模式更稳妥)
2. 格式转换规则
对捕获到的句子依次执行以下替换:
- 移除粗体标记:替换
'''为空字符串 - 处理维基链接:
- 带
|的链接:用\[\[.*?\|(.*?)\]\]替换为$1(保留|后的内容) - 不带
|的链接:用\[\[(.*?)\]\]替换为$1(直接保留链接文本)
- 带
- 处理日期模板:用
\{\{(Date de naissance|Date de décès)\|(\d+)\|([a-zéè]+)\|(\d+)\}\}替换为$2 $3 $4(提取日、月、年组成标准日期)
完整代码示例
import re wiki_text = """{{Infobox Biographie2|charte=linguiste |région = Linguiste occidental |idées remarquables = [[épithète homérique]] |œuvres principales = * ''Introduction à l'étude comparative des langues indo-européennes'' ([[1903]]) * ''Aperçu d'une histoire de la langue grecque'' ([[1913]]) * ''Dictionnaire étymologique de la langue latine'' ([[1932]]) }} '''Paul Jules Antoine Meillet''', né le {{Date de naissance|11|novembre|1866}} à [[Moulins (Allier)|Moulins]] ([[Allier (département)|Allier]]) et mort le {{Date de décès|21|septembre|1936}} à [[Châteaumeillant]] ([[Cher (département)|Cher]]), est le principal [[liste de linguistes|linguiste]] français des premières décennies du {{XXe siècle}}. Il est aussi [[philologue]]. == Biographie == D'origine bourbonnaise, fils d'un [[notaire]] de [[Châteaumeillant]] ([[Cher (département)|Cher]]), Antoine Meillet fait ses études secondaires au [[lycée Théodore-de-Banville|lycée]] de [[Moulins (Allier)|Moulins]]. """ # 捕获目标句子 match = re.search(r"'''Paul.*?philologue\.", wiki_text, re.DOTALL) if match: target = match.group(0) # 批量处理格式 result = re.sub(r"'''", "", target) result = re.sub(r"\[\[.*?\|(.*?)\]\]", r"\1", result) result = re.sub(r"\[\[(.*?)\]\]", r"\1", result) result = re.sub(r"\{\{(Date de naissance|Date de décès)\|(\d+)\|([a-zéè]+)\|(\d+)\}\}", r"\2 \3 \4", result) print(result)
输出结果
Paul Jules Antoine Meillet, né le 11 novembre 1866 à Moulins (Allier) et mort le 21 septembre 1936 à Châteaumeillant (Cher), est le principal linguiste français des premières décennies du {{XXe siècle}}. Il est aussi philologue.
为什么不用单一正则直接处理?
强行用单一正则覆盖所有规则会导致表达式异常冗长,可读性和维护性极差,而且难以精准控制只处理第一句话。这种“先捕获再批量替换”的方式更符合高效、易维护的需求。
内容的提问来源于stack exchange,提问作者SweetPackM
相关产品推荐
相关产品推荐

