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

如何用Ruby实现Vim中正则捕获组的星号包裹替换效果?

使用Ruby完成指定的正则替换操作

原始待处理文本:

Françoise lui apportait un jour <span class="T6">Aladin ou la </span><span class="T6">Lampe Merveilleuse</span>, un autre <span class="T6">Ali-Baba</span>, le <span class="T6">Dormeur éveillé</span> ou <span class="T6">Sinbad le Marin embarquant à Bassora avec toutes ses richesses</span>. J’aurais bien voulu les revoir....

在Vim中可通过以下命令完成替换:

:.s;<span class="T6">\([^<]*\)</span>;**\1**;g

替换后得到的目标文本:

Françoise lui apportait un jour **Aladin ou la ****Lampe Merveilleuse**, un autre **Ali-Baba**, le **Dormeur éveillé** ou **Sinbad le Marin embarquant à Bassora avec toutes ses richesses**. J’aurais bien voulu les revoir....

Ruby实现方案

Ruby的字符串gsub方法可以实现全局正则替换,逻辑和Vim的替换命令完全匹配:

# 定义原始文本
original_text = 'Françoise lui apportait un jour <span class="T6">Aladin ou la </span><span class="T6">Lampe Merveilleuse</span>, un autre <span class="T6">Ali-Baba</span>, le <span class="T6">Dormeur éveillé</span> ou <span class="T6">Sinbad le Marin embarquant à Bassora avec toutes ses richesses</span>. J’aurais bien voulu les revoir....'

# 执行全局正则替换
result_text = original_text.gsub(%r{<span class="T6">([^<]*)</span>}, '**\1**')

# 输出结果
puts result_text

代码说明

  • gsub方法对应Vim替换命令中的g标志,会替换所有匹配项
  • 正则表达式%r{<span class="T6">([^<]*)</span>}和Vim中的正则逻辑一致:捕获<span class="T6">与</span>之间不包含<的内容
  • 替换字符串'**\1**'用**包裹捕获到的分组内容(\1对应正则中的第一个捕获组)

运行这段代码后,输出结果和Vim替换后的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:35:20