Regex 如果整行包含句点且不';不包含某些字符
我使用的是vim,我想删除一整行,它有一个句号(.),但没有以下字符:,ö,ä,ë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) 这是我能做到的最简单的事情。只需对句号进行基本检查,并确
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