【问题标题】:vim: my regexp to select some words doesnt workvim:我选择某些单词的正则表达式不起作用
【发布时间】:2015-12-25 09:21:54
【问题描述】:

Sentences = 可能包含任何内容(包括 html 标签)的行。我有很多这样的句子。这些句子在我不想删除 所有标签huge 文本中(我希望所有其他行保持不变):

<h2 id="aa"><a href="/bb/cc/dd">sentence</a></h2>
<h2 id="xx"><a href="/yy/tt">Another sentence</a></h2>

有时只有:

<h2 id="aa">A sentence without a link</h2>

我觉得奇怪的第一件事是:我正在尝试搜索任何角色并填充一个组。我已经尝试了所有这些解决方案:

  • \(.\)\+ -> 选择整行
  • \([.]\)\+ -> 仅选择“.”字符
  • \([\.]\)\+ -> 仅选择“.”字符
  • \([\.]\)\+ -> 仍然只选择“.”字符(什么?)

从文档中,如果我想选择一组任何字符并填写一个寄存器,我想我可以使用该表达式,但它不起作用:\([\.]\+\)。唯一有效的“关闭”表达式是\(.\)\+,但如果我尝试输出寄存器,它只会填充 最后一个匹配的字符。

所以从上面的这个问题开始,我不能做我想要的,即通过这个输出转换上面的所有句子:

---sentence
---Another sentence
---A sentence without a link

我试过:%s/^&lt;h2 id=\(\[.\]\+\)&lt;a\([.]\)\+&gt;\(.\)\+&lt;\/a&gt;&lt;\/h2&gt;$/---&gt;\3/之类的东西,但它不能正常工作,并且没有包含没有&lt;a /&gt;标签的句子

你会怎么做?

【问题讨论】:

  • 我再次阅读了您的编辑,我可以假设您只需要删除 html 标签并包含 标签吗?
  • @Olivier Pons,我真的不明白为什么我的正则表达式不适合您的问题。你能定义一个输入和输出集吗?例如:“对于输入 x y z,我希望正则表达式给出输出 a b c”
  • @Olivier Pons,请看一下我的正则表达式问题:stackoverflow.com/questions/33181434/…,以获得正确的输入和输出集。
  • %s/&lt;h[^&gt;]*&gt;\(&lt;[^&gt;]*&gt;\)*\([^&lt;]*\).*/--- \2/g 这有帮助吗?

标签: regex vim


【解决方案1】:

只需使用下面的正则表达式:

>([^<>]+)<

演示:https://regex101.com/r/mS2oB5/2

全文:

>([^<>\n]+)<

演示:https://regex101.com/r/mS2oB5/3

【讨论】:

  • 我没有正确解释自己:这些句子是全文,我不想删除 所有标签
  • @Olivier Pons 我编辑了我的答案以涵盖全文,只需添加“\n”。如果您想要的是其他东西,请为给定的输入提供所需的输出。
【解决方案2】:

Vim 在命令模式下,输入 %s/&lt;[^&gt;]*&gt;//g.

说明:
1.\([\.]\)\+仍然只选择“。” caracter.因为[]中的字符被视为普通字符,所以它们没有正则表达式的特殊含义。

2.我的正则表达式&lt;[^&gt;]*&gt;是一个简单的删除所有html标签的方法。会有一些问题,但我会留给你。

3.&lt;[^&gt;]*&gt; 有另一个版本&lt;.*?&gt; 包含greedy 正则表达式功能。

【讨论】:

  • 你的答案很好,但这很棘手吗? &lt;.\{-}&gt; 为什么?如果你能做到&lt;[^&gt;]*&gt;.*? 不是更好的版本。它会比第一个慢。而.*? 只能与 PCRE 一起使用,第一个适用于 BRE ERE PCRE
  • 我没有正确解释自己:这些句子是全文,我不想删除 所有标签
  • @Kent 谢谢你的建议。我会修改我的答案。
  • @OlivierPons 那么句子的定义是什么?任何标签之间的文本还是
  • 我再次更新我的问题,感谢您的精确询问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多