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

如何用Regex处理双语字幕:移除英文文本保留中文内容

我明白你在调试正则处理双语字幕时的头疼——格式不一的行、混在中文里的英文和HTML标签确实容易卡壳。结合你提到的\p{Han}(注意是\p{Han}而不是{Han}哦)匹配中文的思路,我给你一套分步解决的方案,既能适配大多数格式,又能高效剔除不需要的内容:

第一步:先清理HTML标签(比如)

不管内容混得有多乱,先把所有HTML标签一次性清掉,避免干扰后续匹配。用这个全局替换:

  • 查找:<[^>]+>
  • 替换为空字符串
第二步:保留时间轴,提取中文内容

接下来分两种常见场景处理,覆盖绝大多数双语字幕格式:

场景1:时间轴后同一行混着英文和中文

比如:

00:00:01,000 --> 00:00:04,000 Hello 你好呀

用正则匹配时间轴,同时精准提取后面的中文部分:

  • 查找:(\d{2}:\d{2}:\d{2}[.,]\d{3} --> \d{2}:\d{2}:\d{2}[.,]\d{3})\s*(?:[^\u4e00-\u9fa5\u3000-\u303f\uff00-\uffef]+)([\u4e00-\u9fa5\u3000-\u303f\uff00-\uffef]+)
  • 替换:$1\n$2
    (解释:$1完整保留时间轴,$2提取中文汉字+中文标点,中间的英文、空格等非中文内容全部剔除)

场景2:时间轴后英文一行、中文一行

比如:

00:00:01,000 --> 00:00:04,000
Hello world
你好,世界

用这个正则匹配并保留时间轴+中文行:

  • 查找:(\d{2}:\d{2}:\d{2}[.,]\d{3} --> \d{2}:\d{2}:\d{2}[.,]\d{3})\n.*?\n([\u4e00-\u9fa5\u3000-\u303f\uff00-\uffef]+)
  • 替换:$1\n$2
    (解释:.*?是非贪婪匹配,避免跨字幕条目抓取内容)
第三步:处理边缘情况

如果有的行只有英文没有中文,或者格式特别混乱,可以再加一个全局替换删除无中文的冗余行:

  • 查找:^(?!\d{2}:\d{2}:\d{2}|$)[^\u4e00-\u9fa5]+$
  • 替换为空字符串
    (解释:匹配既不是时间轴也不是空行,且完全没有中文的行,直接删除)
额外提示
  1. 正则里的\u4e00-\u9fa5是中文汉字范围,\u3000-\u303f和\uff00-\uffef覆盖了全角中文标点、符号,确保中文内容完整保留;
  2. 如果你的正则引擎支持Unicode属性,用\p{Han}代替\u4e00-\u9fa5更简洁,比如(\p{Han}+);
  3. 针对ASS等特殊格式的字幕,时间轴的正则可能需要微调,但核心逻辑不变——先锁定时间轴格式,再精准提取中文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:28:51