匹配字符串的一部分,但排除某些文件扩展名

时间:2018-07-03 20:40:00

标签: regex

我有以下两个文件:

test_ExampleSchemeConfig
test_ExampleSchemeConfig.cpp

,并且我想使用以下正则表达式将两者分开。我想要 过滤掉test_ExampleSchemeConfig,以下表达式不起作用:

test_.*(?!(\.(cpp|hpp)))$

我想知道如何解决?

我相信我的问题的答案应该在某个地方,但是我找不到运气。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以考虑使用以下正则表达式之一:

^test_[^.]*$

它将匹配以test_开头的字符串,然后具有.以外的任何0+字符。参见regex demo

或者,您可以使用

^test_.*$(?<!\.[ch]pp)

它将匹配任何以test_开头,然后有0+个字符,但不以.cpp.hpp结尾的字符串。参见regex demo

如果您的正则表达式引擎不支持向后搜索,请使用与前瞻相同的模式:

^test_(?!.*\.[ch]pp$).*$

此正则表达式与test_匹配,然后确保除换行符外没有其他0+个字符,后跟.ch然后是{{1 }}放在字符串的末尾,然后抓住整行。参见regex demo