最后一次出现 : 和 .tst 之间的文本的正则表达式

Posted

技术标签:

【中文标题】最后一次出现 : 和 .tst 之间的文本的正则表达式【英文标题】:regex for text between last occurrence of : and .tst 【发布时间】:2017-03-03 02:20:02 【问题描述】:

例如,我有一个字符串 Banjo.ald:Mandolin.ald:Guitar.tst,我正在尝试找到将返回字符串 Guitar 的正则表达式。在上面的示例中,我在我感兴趣的文本之前有两个组(即 Banjo.ald:Mandolin.ald:),但实际上将有 1 到 N 个这些组,其中一个组被定义为 Banjo.ald:

如果您需要更清楚地了解我在寻找什么,请告诉我。

【问题讨论】:

我需要更清楚您在寻找什么。 @CasimiretHippolyte 如果我没看错,我想他只是想要Guitar.tst。 在上面的示例中,我希望返回吉他,所以我想删除最后一个冒号之前的所有内容(包括最后一个冒号本身),并且我想保留 .tst 之前的所有其他内容(不包括.tst)。该字符串将始终以 :Guitar.tst 结尾,但我不知道在它之前还有多少其他的 something.ald: 部分。如果您需要更多说明,请告诉我。 【参考方案1】:

您可以使用贪婪的正则表达式,它会消耗所有内容,直到最后一个冒号。然后捕获后面的单词,直到.tst

^.*:(.*).tst$

Regex101

【讨论】:

我尝试在 regexr 中使用它作为测试,但它返回整个字符串,可能我做错了什么,因为我对 regexr 不是很熟悉 在我上面给出的演示中它是有效的,而且我也相信这适用于 Java 和大多数语言。如果你能给我一个你的演示链接,也许我可以看看。 感谢您提供 Regex101 的链接,这非常有帮助。我意识到我得到不同回应的原因是我的例子有缺陷。我的字符串中有空格:Ban jo.ald:Man dolin.ald:Gui tar.tst 实际上,空格应该无关紧要,但在本例中,您最终会捕获Gui tar 而不是Guitar 我已得到纠正,我在应用程序中使用的正则表达式引擎与您链接的 regex101 站点的行为方式不同。我怀疑 regex101 网站显示完整匹配以及第一组,我的正则表达式引擎只返回完整匹配。

以上是关于最后一次出现 : 和 .tst 之间的文本的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在匹配字符串之后查找最大数字的最后一次出现

不止一次用正则表达式替换两个字符串之间的字符串,python

JavaScript 正则表达式仅选择最后一次出现

正则表达式在最后一次匹配后不匹配文本

用于在最后一个括号 () 之间获取文本的正则表达式

正则表达式 - 如何在第一次出现字符时停止