Vim如何使用正则表达式删除一些单词

时间:2018-07-20 22:16:16

标签: regex vim

在vim编辑器中,我想使用正则表达式删除括号和括号中的单词。

请帮助我!

现状:

DOT("."), COMMA(","), SEMICOLON(";"), COLON(":"), QUOTE("'"),
EQUALS("="), NOT_EQUALS("<>"), LESS_THAN("<"), LESS_EQUALS("<="),

想要成为:

DOT, COMMA, SEMICOLON, COLON, QUOTE,
EQUALS, NOT_EQUALS, LESS_THAN, LESS_EQUALS,

6 个答案:

答案 0 :(得分:3)

这里很短:

%s/(.\{-})//g

说明:它与括号(匹配,然后在下一个右括号.\{-}之前匹配尽可能少的字符)。它完全取代了整个比赛。

答案 1 :(得分:2)

为了简单起见,而不必使用过多的正则表达式,我会使用

    $(imgElement).children("img").css({"width":"", "transform":""});

这基本上将删除双引号和括号内的任何一两个字符。

同时使用:%s#("..\?")##g 代替#可能很容易阅读,并且在某些情况下有助于避免在需要时转义/

答案 2 :(得分:1)

您确实应该花一些时间正确学习正则表达式,这是非常有用且非常酷的东西。话虽如此,这是学习至少这一部分的好时机。

您有一个文本列表,并且想在一行中重复匹配括号内的所有内容。

%s/\([^(]*\)[^)]*)\([^(]*\)/\1\2/g

首先,我们将在整个文件中执行此操作,因此让我们使用%s。接下来,我们将/作为分隔符。因此,我们将匹配的模式为\([^(]*\)[^)]*)\([^(]*\)

让我们进一步分解。 \( \)是分组运算符,它只是告诉vim:“嘿,我稍后可能需要把东西放在这里。” [^ ]是not运算符,并说“我不是这些字符中的任何一个字符”。 [^)]*然后说:“我希望我连续可以抓住的所有不是“)”的字符。所有这些都是第一组。

在我们的第一个\( \)之后,我们有一些不在组中的东西,因为我们不想保留它。 [^)]*)再次使用not运算符,以匹配一堆不是“)”的字符,然后我们有一个“)”,它与文字“)”匹配(可能有更好的方法部分,但有效。

接下来,我们有第二个\( \)组,其中包含[^(]*。再一次,另一个not运算符,我们尽可能地匹配尽可能多的非“(”。我们需要我们的模式在下一个“(”之前停止,以便我们的正则表达式可以在该行上多次匹配;如果我们使用了{ {1}}相反,我们不得不多次运行正则表达式,因为每次运行只删除一组parens。

在我们的模式之后,我们还有另一个\(.*\),它界定了将要放置在该模式中的模式。还记得我说过/告诉vim将内容保留在里面供以后使用吗?这是我们使用它的地方。我们的第一组基本上是“ a之前的所有内容”,而第二组基本上是“ a之后的所有内容”。我们告诉vim我们只想保留组1,然后保留组2,并带有\( \)

最后,\1\2意味着在整个行中对我们的正则表达式进行全局处理,这意味着尝试尽可能多地在行中匹配一次。

答案 3 :(得分:1)

尝试以下模式:

(?:[A-Z]{3,9}|, |_){1,2}

您可以online对其进行测试

enter image description here

答案 4 :(得分:1)

这似乎可行:

%s/("[.,;:'=<][>=]*")//g

答案 5 :(得分:1)

已经给出的许多解决方案都非常出色。与其他一些工具一样,我建议您更深入地学习正则表达式。对于您的特定问题,您也可以使用/(搜索左括号,然后使用da)删除括号及其内容(如果要保留这对,请跳过),移至下一个匹配项n,用;重复删除,直到删除所需的内容为止。