非贪婪搜索字符串中的冗余值

时间:2019-03-20 08:09:37

标签: regex

基本上,我有这个字符串,我只想获取一个不同的图像文件名。

/mPastedImg_Time1469244713469.png&gtxResourceFileName=mPastedImg_Time1469244713469.png&amp

我有此正则表达式代码,但似乎不起作用。

[^\/]*?_Time[0-9]{13}\.\w{3,4}\&

我的预期输出是:

mPastedImg_Time1469244713469.png

但是实际输出是:

mPastedImg_Time1469244713469.png&gtxResourceFileName=mPastedImg_Time1469244713469.png&

3 个答案:

答案 0 :(得分:2)

要在字符串中查找唯一的文件名,可以使用此正则表达式,

([^\/&= ]+_Time[0-9]{13}\.\w{3,4})(?!.*\1)

在这里,([^\/&= ]+_Time[0-9]{13}\.\w{3,4})将捕获您所需的文件名,而(?!.*\1)的否定前瞻会为您提供最后一个匹配项,从而确保删除字符串中所有重复的匹配项。另外,由于使用了适当的否定字符集,它还允许匹配文件名中也要捕获的中文字符集。

Demo

答案 1 :(得分:1)

您的模式有2个匹配项,由于否定的字符类[^\/]与正斜杠不匹配,因此第二部分的匹配项较大。

您可能要做的是使第一个字符类更具限制性,以指定允许匹配的内容(例如[a-zA-Z]),并确保您不使用全局匹配来匹配所有内容,而只是一场比赛:

[a-zA-Z]*_Time[0-9]{13}\.\w{3,4}

Regex demo

请注意,您不必在模式结尾处匹配与号。

答案 2 :(得分:0)

我认为您已经非常接近它了,但是您做的太复杂了:

如果您知道该名称为mPastedImg_Time,请充分使用它。

像这样简单地做呢?

mPastedImg_Time[0-9]{13}\.\w{3,4}