Как сопоставить только 2-й результат?

#regex

#регулярное выражение

Вопрос:

У меня есть имена файлов, например ABC_2014_09_EFG.pdf

и моя программа (Enfocus Switch) позволяет мне определять только регулярное выражение, где в качестве результата всегда используется первое совпадение.

Я хочу, чтобы число совпадало 09 .

Я уже пробовал _[0-9]{2}_ , но потом я тоже получаю подчеркивания в результате. Мне нужны только два числа, как мне это сделать? Кто-нибудь знает? Уже пытаюсь здесь в течение нескольких часов..

Комментарии:

1. соблюдает ли Enfocus (?:) (группы без захвата)?

Ответ №1:

попробуйте это с оглядкой /(?<=d{4}_)(d )/

это будет искать четыре цифры, за которыми следует символ подчеркивания, а затем выберите следующие цифры

Вот краткое объяснение, как это работает:

Визуализация регулярных выражений

Демонстрация Debuggex

·

Другим подходом может быть использование предварительного просмотра: (d{2})(?=_D )

это будет искать две цифры, за которыми следует символ подчеркивания, за которым следуют некоторые не цифры Визуализация регулярных выражений

Демонстрация Debuggex

Комментарии:

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);

}