Regex 在第一个'之间查找并替换&燃气轮机';接下来'<';精神抖擞

Regex 在第一个'之间查找并替换&燃气轮机';接下来'<';精神抖擞,regex,vim,Regex,Vim,我有一个带有一些标题的html表: <th>Header01</th> ... <th>Different Header 20</th> 我知道我可以使用:s/\%Vth/td/g将所有th替换为td,但是我如何使用Vim的regex来查找和替换和之间的所有内容呢/P pI尝试了以下操作但未成功/p 预编码:s/\%V\>(.*)\您可以使用 %s/>\(.\{-}\)</>{{ \1 }}</g %s/>\(.\{-}

我有一个带有一些标题的html表:

<th>Header01</th>
...
<th>Different Header 20</th>
我知道我可以使用
:s/\%Vth/td/g
将所有
th
替换为
td
,但是我如何使用Vim的regex来查找和替换
之间的所有内容呢/P
pI尝试了以下操作但未成功/p
预编码:s/\%V\>(.*)\您可以使用

%s/>\(.\{-}\)</>{{ \1 }}</g
%s/>\(.\{-}\){{{\1}}
-匹配一个
  • \(.\{-}\)
    -将任何0个或多个字符捕获到组1中(但换行符,如果需要包含换行符,请使用
    \\\
    预先结束
    ),但尽可能少
  • g
    对行执行多个搜索和替换操作。

    您可以使用

    %s/>\(.\{-}\)</>{{ \1 }}</g
    
    %s/>\(.\{-}\){{{\1}}
    -匹配一个
  • \(.\{-}\)
    -将任何0个或多个字符捕获到组1中(但换行符,如果需要包含换行符,请使用
    \\\
    预先结束
    ),但尽可能少
  • p替换为代码{{\1}/code,代码{{/code,组1值和代码}>
    g
    在行上执行多个搜索和替换操作。

    如果您愿意冒险在vim中通过正则表达式更改html/vim,您可以执行以下操作:

    %s/>[^<]*</>{{ & }}</g
    

    %s/>[^如果您愿意冒险在vim中通过正则表达式更改html/vim,您可以执行以下操作:

    %s/>[^<]*</>{{ & }}</g
    

    %s/>[^我可能误读了这个问题,但似乎所需的替换文本是在3个空格(而不是在原始匹配文本周围)“用{{}替换第一个>和下一个>之间的所有内容”。如果正确,则以下简单的替换命令应该可以工作:

    %s/>.*</>{{   }}</g
    

    %s/>.{{}}我可能误读了这个问题,但似乎所需的替换文本是在3个空格(而不是在原始匹配文本的周围):“用{{}替换第一个>和下一个<之间的所有内容”。如果正确,那么下面的简单替换命令应该可以工作:

    %s/>.*</>{{   }}</g
    
    %s/>.{{}如果每行只有一个标记-->内容,则可以执行以下操作:

    :%norm cit{{ }}
    
    正如您所知,“cit”是一个代表“changeintertag”的vim文本对象。 如果每行上有许多标记,可以尝试:

    :%s,>\zs[^<]*\ze</.*,{{ }},g
    
    :%s,>\zs[^如果每行只有一个标记-->内容,则可以执行以下操作:

    :%norm cit{{ }}
    
    正如您所知,“cit”是一个代表“changeintertag”的vim文本对象。 如果每行上有许多标记,可以尝试:

    :%s,>\zs[^<]*\ze</.*,{{ }},g
    

    :%s,>\zs[^Don escape
    。Vim中的惰性量词是
    {-}
    。作为一般规则,尝试
    s/\v>{-}。它可能适用于简单的HTML,但使用HTML解析器通常是一个更好的主意。好的,
    %s/>\(.{-}){\1}这只意味着你明白正则表达式不能适应所有类型的标记语言语法,当正则表达式可能找到你不想要的东西时,会出现一些边缘情况,反之亦然。@ScottSkiles在使用正则表达式(HTML)进行“查找并替换”时,你只需要稍微小心一点因为您的正则表达式可能与您认为的不匹配(在某些情况下),特别是如果您有一些复杂的HTML。不要逃避
    。Vim中的惰性量词是
    {-}
    。一般来说,尝试
    s/\v>{-}。它可能适用于简单的HTML,但使用HTML解析器通常是一个更好的主意。好的,
    %s/>\(\{-}\{{\1}}这只是意味着您了解正则表达式不能适应所有类型的标记语言语法,并且当正则表达式可能找到您不想要的东西时,会出现一些边缘情况,反之亦然。@ScottSkiles在使用正则表达式(在HTML上)进行“查找并替换”时,您只需要稍微小心一点因为您的正则表达式可能与您认为的不匹配(在某些情况下)特别是如果你有一些复杂的HTML。你指的@Kent?@ScottSkiles有什么风险?例如,ScottSkiles你有跨多行的
    ,或者在一个
    中有

    ,等
    好吧,你最了解你的输入,如果你确信它会起作用,就去做吧。啊,谢谢你们两位。我没有看到初始值我从艾哈迈德那里得到了评论。@Kent,我修改了上面的内容,在Vim的视觉模式下运行,只选择了我想更改的行。这仍然危险吗?你指的@Kent?@ScottSkiles有什么风险。@ScottSkiles例如,你有
    跨越多行,或者在一行
    中有

    ,等
    你知道吗如果您确信输入效果最佳,就这样做。啊,谢谢你们。我没有看到艾哈迈德的最初评论。@Kent,我修改了上面的内容以Vim的视觉模式运行,只选择了我想要更改的行。这仍然危险吗?