Regex 如果整行包含句点且不';不包含某些字符

Regex 如果整行包含句点且不';不包含某些字符,regex,vim,Regex,Vim,我使用的是vim,我想删除一整行,它有一个句号(.),但没有以下字符:,ö,ä,ë good. bad # gets deleted göod. # does not get deleted bäd. goëd # does not get deleted go:od. # does not get deleted 下面是我使用的regex语句。我使用替换语句是因为我想确认每次删除,但我愿意接受任何解决方案(即%g//d) 这是我能做到的最简单的事情。只需对句号进行基本检查,并确

我使用的是vim,我想删除一整行,它有一个句号(.),但没有以下字符:,ö,ä,ë

good. bad # gets deleted
göod.     # does not get deleted
bäd. goëd # does not get deleted
go:od.    # does not get deleted
下面是我使用的regex语句。我使用替换语句是因为我想确认每次删除,但我愿意接受任何解决方案(即
%g//d


这是我能做到的最简单的事情。只需对句号进行基本检查,并确保句号前后(该行上)的所有内容都不是alt字符。注意,您可能需要将前导的
^
和尾随的
$
替换为
\n
,或者可能需要在命令行中添加另一个标志,以便按行查找

^[^:öäë]*\.[^:öäë]*$
或翻译用于VIM(Sundeep的荣誉):


示例:

@Addison的答案适用于这种特殊情况;这里有一个更通用的解决方案,以防正匹配不像
那么简单:

/^\%(.*[:öäë]\)\@!.*\./
这将断言一个不匹配的
\@
从行的开头开始^在坏字符*[:öäë]之后的任意位置,然后匹配(同样从开头开始,因为断言没有使用任何字符)一个文本周期
*\。

您可以在
:global
以及
:substitute
中使用此正则表达式:

:%s/^\%(.*[:öäë]\)\@!.*\..*\n//c

对于OPOn,这可以翻译为
:g/^[^:öäë]*\..[^:öë]*$/d
,注意:Vim对regexp有自己的语法。在绝大多数情况下,根据
https://regex101.com/
没用。谢谢@Sundeep。编辑成answer,恭喜你。最近的Vims添加了logipat插件。然后,您可以使用如下内容:
LP“\。”&!(“[:äöü]”)
/^\%(.*[:öäë]\)\@!.*\./
:%s/^\%(.*[:öäë]\)\@!.*\..*\n//c