我试图创建一个匹配除了精确结束字符串之外的任何内容的正则表达式,在这种情况下,扩展名为' .exe'。
名为的文件示例:
到目前为止,我创建了正则表达式/.*\.(?!exe$)[^.]*/
但它对案例1和案件6不起作用。
答案 0 :(得分:2)
不是简单的替代工作吗?
string.sub(/\.exe\z/, "")
答案 1 :(得分:2)
您可以使用正lookahead。
^.+?(?=\.exe$|$)
^
字符串开头.+?
非greedily匹配一个或多个字符... (?=\.exe$|$)
直到文字.exe
结束。如果没有,请匹配结束。答案 2 :(得分:0)
你的意思是正则表达式匹配或捕获?
可能只有一个正则表达式的答案,但它目前无法解决。根据您的测试数据和您想要匹配的内容,执行以下操作将涵盖您想要匹配和捕获的内容:
name = 'foo.bar.exe'
match = /(.*).exe$/.match(name)
if match == nil
# then this filename matches your conditions
print name
else
# otherwise match[1] is the capture - filename without .exe extension
print match[1]
end
答案 3 :(得分:-1)
string pattern = @" (?x) (.* (?= \.exe$ )) | ((?=.*\.exe).*)";
.exe
结尾。该条件不包含在比赛中。 .exe
后面的内容。(?x)表示模式字符串中的空格被忽略。 或者不要使用(?x)并删除所有空格。
适用于所提供的所有6种情况。