Vim:在捕获组中使用集合(或:用不同的标签替换标签)

时间:2015-09-16 05:45:36

标签: regex vim

我有一个Latex文档,我希望将所有数学模式标记$ .. $替换为相应的胶乳等效\( .. \)

我已经使用了这个正则表达式:%s/\$\(.\+\)\$/\\(\1\\)/gc,但当然在一个简单的情况下我失败了,我在一行中有超过1个tagpair,即

This is an example: $ 1+2=3 $ and $4+5=9$

解决这个问题的简单方法是什么?我尝试在我的捕获组中使用一个集合,如下所示:\([^\$]\)但这不匹配。

编辑:\([^\$]\)不匹配的原因是因为我错过了添加量词,如下所示:\([^\$]\+\)。这也是有效的,因为接受的答案下的评论显示。

2 个答案:

答案 0 :(得分:5)

:%s/\$\(.\{-1,}\)\$/\\(\1\\)/gc

使用非贪婪量词.\{-1,}代替贪心.\+

:help /\{

答案 1 :(得分:0)

我也会使用非贪婪的限定符,但更改条件以开始/结束数学环境:

:%s/\(\\\)\@<!\$\(.\{-1,}\)\(\\\)\@<!\$/\\(\2\\)/g

所以我会使用一些lookbehind来确保一个$在没有它的情况下离开它。