我有一个很大的HTML文件,它有很多标记,如下所示:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
我正在尝试进行Vim搜索和替换以摆脱所有class=""
和style=""
,但我无法完成匹配。
我的第一次尝试就是这个
%s/style=".*?"//g
但是Vim似乎不喜欢?
。不幸的是,删除?
会使匹配过于贪婪。
如何才能使我的比赛不合适?
答案 0 :(得分:700)
而不是.*
使用.\{-}
。
%s/style=".\{-}"//g
另请参阅:help non-greedy
答案 1 :(得分:53)
使用{ - }运算符在vim中进行非贪婪搜索。像这样:
%s/style=".\{-}"//g
试试:
:help non-greedy
答案 2 :(得分:47)
有什么问题
%s/style="[^"]*"//g
答案 3 :(得分:15)
如果你更熟悉PCRE正则表达式语法,那么
你有[g] vim使用perl功能编译,使用
进行测试:检查和检查功能;如果+ perl在那里你很高兴去)
尝试使用
进行搜索/替换:perldo s///
实施例。在img标签中交换src和alt属性:
<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p>
:perldo s/(src=".*?")\s+(alt=".*?")/$2 $1/
<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
答案 4 :(得分:11)
我发现这类问题的一个很好的解决方案是:
:%!sed ...
(如果您愿意,可以选择perl)。 IOW,而不是学习vim的正则表达式特性,使用你已经知道的工具。使用perl会使?修饰符工作不匹配。
答案 5 :(得分:1)
使用\v
(如多条评论中所述)
:%s/\v(style|class)\=".{-}"//g
答案 6 :(得分:1)
插件eregex.vim处理Perl风格的非贪婪运算符*?
和+?
答案 7 :(得分:-4)
天儿真好,
Vim的正则表达式处理并不太棒。我发现sed的regexp语法与vim的功能正确匹配。
我通常在(:set hlsearch)上设置搜索突出显示,然后输入斜杠后使用正则表达式进入搜索模式。
编辑:Mark,Dale Dougherty的优秀着作“Sed&amp; Awk”(sanitised Amazon link)也涵盖了减少贪婪匹配的技巧。
第三章“理解正则表达式语法”是sed和awk所涉及的更原始的正则表达式功能的优秀介绍。只是简短的阅读和强烈推荐。
HTH
欢呼声,