#regex
#регулярное выражение
Вопрос:
У меня есть имена файлов, например ABC_2014_09_EFG.pdf
и моя программа (Enfocus Switch) позволяет мне определять только регулярное выражение, где в качестве результата всегда используется первое совпадение.
Я хочу, чтобы число совпадало 09
.
Я уже пробовал _[0-9]{2}_
, но потом я тоже получаю подчеркивания в результате. Мне нужны только два числа, как мне это сделать? Кто-нибудь знает? Уже пытаюсь здесь в течение нескольких часов..
Комментарии:
1. соблюдает ли Enfocus
(?:)
(группы без захвата)?
Ответ №1:
попробуйте это с оглядкой /(?<=d{4}_)(d )/
это будет искать четыре цифры, за которыми следует символ подчеркивания, а затем выберите следующие цифры
Вот краткое объяснение, как это работает:
·
Другим подходом может быть использование предварительного просмотра: (d{2})(?=_D )
это будет искать две цифры, за которыми следует символ подчеркивания, за которым следуют некоторые не цифры
Комментарии:
1. ну, кажется, enfocus поддерживает поисковые запросы ( enfocus.com/manuals/UserGuide/SW/11/enUS/Switch/en-us/reference /… ), поэтому я обновил свой ответ
2. 2-й подход работает. Большое вам спасибо, вы спасли мой день 🙂
Ответ №2:
Вы можете попробовать использовать приведенное ниже регулярное выражение, чтобы записать последнее число, которому предшествовало _
,
.*_([0-9] ).*?$
или
вы могли бы использовать положительный просмотр и просмотр назад, чтобы сопоставить только двухзначное число, присутствующее в вашей входной строке,
(?<=_)d{2}(?=_)
Объяснение:
(?<=_)
Следит за_
символом.d{2}
Проверяет, есть ли какое-либо двузначное число после_
символа.(?=_)
проверяет, следует ли за этим двузначным числом_
. Он будет соответствовать цифрам только в том случае, если выполнены оба условия.
или
Если ваш язык поддерживает K
, используйте его вместо поиска
_Kd{2}(?=_)
Комментарии:
1. кажется, enfocus не поддерживает поисковые запросы
2. @bukfixart поддерживает ли он
K
?3. нет, это не так ( enfocus.com/manuals/UserGuide/SW/11/enUS/Switch/en-us/reference /… )
Ответ №3:
Это должно работать в 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);
}