Повторение на обратном взгляде вокруг регулярного выражения - PullRequest
0 голосов
/ 01 марта 2019

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

Из этого примера мне интересно извлечь "1-2-19 ".

28-3G__1-2-19 02252019.xlsx

Из этого примера я заинтересован в извлечении" 1-5-19 ".

12H-14W_1-5-19 02252019.xlsx

Из этого примера мне интересно извлечь "11-12-18"

343X-N_11-12-18.xlsx

В настоящее время я использую выражение:

(?<=_)(.*?)(?=( +[0-9]{8})?\.xlsx)

, которое возвращает результаты, которые я хочу получить для последних 2 примеров, однакодля первого он возвращает «_1-2-19», и это лишнее подчеркивание вызывает у меня проблемы.

Я пробовал повторения разного рода, но, похоже, ничего не работает.Любая идея будет высоко оценена.

Это разные подходы, которые я безуспешно пробовал:

(?<=(_|__))(.*?)(?=( +[0-9]{8})?\.xlsx)

(?<=__?)(.*?)(?=( +[0-9]{8})?\.xlsx)

(?<=_+)(.*?)(?=( +[0-9]{8})?\.xlsx)

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

В вашем первом шаблоне вы используете 2 группы захвата, а вторая группа захвата (которая находится внутри позитивного просмотра) содержит второе значение.

Обратите внимание, что (.*?) соответствует любому символу, не являющемуся жадным, кроме разрыва строки, и не учитывает шаблон цифра-дефис, который вы хотите сопоставить.

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

(?<=_)\d+-\d+-\d+(?=(?: \d{8})?\.xlsx\b)

Пояснение

  • (?<=_)Позитивный взгляд за утверждением того, что слева, является подчеркиванием
  • \d+-\d+-\d+ Соответствие 1+ цифр дефис 1 + цифры дефис и 1+ цифры
  • (?= Позитивный взгляд вперед, чтобы утверждать, что направо -
    • (?: \d{8})? Необязательная группа без захвата
    • \.xlsx\b Совпадение с точкой, за которой следует .xlsx Добавление границы слова \b, чтобы убедиться, что xlsx не является частью большегоword.
  • ) Закрыть положительный прогноз

См. regex demo

Этот шаблон \d+-\d+-\d+может быть более конкретным, если вы хотите только 1-2 цифры, такие как \d{1,2}-\d{1,2}-\d{1,2}

0 голосов
/ 01 марта 2019

Попробуйте: \d{1,2}\-\d{1,2}\-\d{1,2}

Должно совпадать с датами в ваших примерах, не затрагивая другой текст. Вы можете *1004* просматривать свои тестовые примеры с помощью этого регулярного выражения .

Обратите внимание, что \d является токеном для любой цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...