Ruby 正则表达式匹配除结束字符串以外的任何内容
我正在尝试创建一个正则表达式,该正则表达式与任何内容都匹配,除了一个精确的结束字符串,在本例中是扩展名“.exe” 名为的文件的示例:Ruby 正则表达式匹配除结束字符串以外的任何内容,ruby,regex,Ruby,Regex,我正在尝试创建一个正则表达式,该正则表达式与任何内容都匹配,除了一个精确的结束字符串,在本例中是扩展名“.exe” 名为的文件的示例: 'foo'(没有扩展名)我想要'foo' “foo.bar”我想要“foo.bar” 'foo.exe.bar'我想得到'foo.exe.bar' 'foo.exe1'我想要'foo.exe1' 'foo.bar.exe'我想得到'foo.bar' 'foo.exe'我想得到'foo' 到目前为止,我创建了regex/.\.(?!exe$)[^.]*/ 但是它不
/.\.(?!exe$)[^.]*/
但是它不适用于案例1和案例6。简单的替换难道不起作用吗
string.sub(/\.exe\z/, "")
你是说正则表达式匹配还是捕获
也许有一个只有正则表达式的答案,但我现在想不起来。根据您的测试数据和您想要匹配的内容,执行以下操作将涵盖您想要匹配和捕获的内容:
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
- 第一个匹配是一个积极的前瞻,检查您的字符串
以
结尾。该条件不包括在比赛中李>.exe
- 第二场比赛是一个积极的展望,条件包括在比赛中
匹配。它只检查您是否有后跟
的内容.exe
字符串的开头^
一个或多个字符不匹配+?
直到文字(?=\.exe$|$)
出现在末尾。如果没有,比赛结束.exe
上下文是什么?如果我扫描的字符串不是以
.exe
结尾,我可能只会使用:s!~/\。exe$/
。请使用正确的红宝石缩进。这有助于其他人理解您的代码。这正是我想要的。谢谢:)你是个巫师。谢谢。我不敢相信有人会投反对票。这个答案很有效。看看你建议的模式,它根本不起作用。嵌入式空间非常重要,如果您仔细观察,就会发现它是如何失败的。即使使用了x
标志,它仍然会失败。我在它前面使用了Rgex选项(?x),使模式更具可读性。我的错。。。。。。。。但在投票否决我的答案之前,你应该知道允许在匹配模式字符串中使用空格的选项。我确实知道x
。它不是新的,也不局限于Ruby。你的答案没有提到使用x
,如果你打算使用无关紧要的嵌入空格,那么应该使用x,因为这些空格会混淆和误导阅读你答案的人,而这些人并不知道这些空格。你是在我的评论之后加的。这就是我添加评论的原因,这样你就可以改进它,避免进一步降低投票率。即使使用该标志,您的模式也不能按照OP要求工作,因为它不能正确处理前两个测试。此外,在引用用户名时,请尊重并使用正确的名称。
string pattern = @" (?x) (.* (?= \.exe$ )) | ((?=.*\.exe).*)";
^.+?(?=\.exe$|$)