我有文件名,例如ABC_2014_09_EFG.pdf
和我的程序(Enfocus Switch)只允许我定义一个正则表达式,它始终使用第一个匹配作为结果。
我想要的是匹配数字09
。
我已经尝试了_[0-9]{2}_
,但我也在结果中得到了下划线。我只需要两个数字,我该怎么做?谁有线索?已经在这里试了几个小时..
答案 0 :(得分:2)
在/(?<=\d{4}_)(\d+)/
这将查找四位数后跟一个下划线,然后选择以下数字
这是一个简短的解释:它是如何工作的:
·
另一种方法可能是使用前瞻:
(\d{2})(?=_\D+)
这将查找两个数字,后跟下划线,后跟一些非数字
答案 1 :(得分:1)
您可以尝试以下正则表达式来捕获前面带有_
的最后一个数字,
.*_([0-9]+).*?$
或强>
您可以使用正向前瞻和后瞻性来匹配输入字符串中的两位数字,
(?<=_)\d{2}(?=_)
<强>解释强>
(?<=_)
照看_
符号。
\d{2}
检查_
符号后面是否有两位数字。
(?=_)
检查该两位数后面是_
。只有满足两个条件时,它才会匹配数字。
或强>
如果您的语言支持\K
,请使用它而不是外观
_\K\d{2}(?=_)
答案 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);
}