如何仅匹配第二个结果?

时间:2014-06-24 09:07:54

标签: regex

我有文件名,例如ABC_2014_09_EFG.pdf

和我的程序(Enfocus Switch)只允许我定义一个正则表达式,它始终使用第一个匹配作为结果。

我想要的是匹配数字09

我已经尝试了_[0-9]{2}_,但我也在结果中得到了下划线。我只需要两个数字,我该怎么做?谁有线索?已经在这里试了几个小时..

3 个答案:

答案 0 :(得分:2)

/(?<=\d{4}_)(\d+)/

后面看一下

这将查找四位数后跟一个下划线,然后选择以下数字

这是一个简短的解释:它是如何工作的:

Regular expression visualization

Debuggex Demo

·

另一种方法可能是使用前瞻: (\d{2})(?=_\D+)

这将查找两个数字,后跟下划线,后跟一些非数字 Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

您可以尝试以下正则表达式来捕获前面带有_的最后一个数字,

.*_([0-9]+).*?$

DEMO

您可以使用正向前瞻和后瞻性来匹配输入字符串中的两位数字,

(?<=_)\d{2}(?=_)

DEMO

<强>解释

  • (?<=_)照看_符号。

  • \d{2}检查_符号后面是否有两位数字。

  • (?=_)检查该两位数后面是_。只有满足两个条件时,它才会匹配数字。

如果您的语言支持\K,请使用它而不是外观

_\K\d{2}(?=_)

DEMO

答案 2 :(得分:0)

这应该在Enfocus Switch中起作用:

function jobArrived( s : Switch, job : Job )
{
	var filename = job.getName( );

	var numberRE = /^\w+\_(\d+)\_\w+\.pdf$/g;	
	numberRE.search( filename );
	var number = numberRE.cap(1);

	job.log(1,"Number is: "+number);

}