在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,
答案 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)
答案 4 :(得分:1)
这似乎可行:
%s/("[.,;:'=<][>=]*")//g
答案 5 :(得分:1)
已经给出的许多解决方案都非常出色。与其他一些工具一样,我建议您更深入地学习正则表达式。对于您的特定问题,您也可以使用/(
搜索左括号,然后使用da)
删除括号及其内容(如果要保留这对,请跳过),移至下一个匹配项n
,用;
重复删除,直到删除所需的内容为止。