正则表达式:句子选择

时间:2010-10-14 08:15:11

标签: regex vim

如何保留以X标准开头的句子并删除符合Y标准的句子。 使用vim,我想删除所有不以void开头的句子。

  

void set_first_name(string in_first_name);
  string first_name();
  void set_last_name(string in_last_name);
  string last_name();
  void set_composer_yob(int in_composer_yob);
  int composer_yob();
  void set_composer_genre(string in_composer_genre);
  string composer_genre();
  void set_ranking(int in_ranking);
  int ranking();
  void set_fact(string in_fact);

2 个答案:

答案 0 :(得分:3)

vim命令:g和:v help here。

:g/regex/action

'g'全局选择与正则表达式匹配的所有行并将操作应用于它们。 'v'反转正则表达式(如grep -v),因此将操作应用于所有不匹配的行。

所以要删除所有不以void开头的行:

:v/^void/d

其中'd'是删除该行的操作。

答案 1 :(得分:0)

通常,这方面的正则表达式如下:

^(?!\s*void).*\n

即,匹配行的开头(^),然后声明您无法在此处匹配void,可选地前面有空格,然后匹配所有字符,直到以下换行符。

看来(感谢@Al)vim通过不同的语法支持前瞻(\@!表示否定,\@=表示正向前瞻),因此这种模式可以转换为

^(\@!\s*void).*\n