Как включить необязательный пробел между двумя словами, не выбирая следующее слово? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть эти имена файлов ниже и используется следующее регулярное выражение:

Имена файлов:

  1. 1234 12345678 ДОКУМЕНТ ТЕСТА 20 декабря 2018.pdf
  2. 1234 12345678 ТЕСТДОКУМЕНТ 20 декабря 2018.pdf

Регулярное выражение, которое я использую для сопоставления имени файла:

(\d+)\s(\d+)\s(\w+\s?\w+)

для первого файла, который он работает, но для 2-гоfile это соответствует месяцу December также, так как это два слова с пробелом.

Как написать регулярное выражение для соответствия только "1234 12345678 TEST DOCUMENT" в обоих случаях с пробелом между TEST и DOCUMENT или без него.

Ожидаемый результат:

  1. 1234 12345678 ИСПЫТАТЕЛЬНЫЙ ДОКУМЕНТ
  2. 1234 12345678 ТЕСТДОКУМЕНТ

Не для 2-го файла (1234 12345678 ТЕСТДОКУМЕНТдекабрь)

Ответы [ 4 ]

0 голосов
/ 21 декабря 2018

Вы можете выбрать все из начала строки, за которой следует (заглядывание (?=...)) пробел и название месяца.Вот для ноября и декабря:

^.*(?= December| November)

Будьте осторожны со случаями названий месяцев (верблюд, верхний и т. Д.).Кроме того, у вас есть локализованные данные, названия месяцев на разных языках ...

0 голосов
/ 21 декабря 2018

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

(\d+)\s(\d+)\s(.*?)\s\d{1,2},\s\d{4}\.pdf$

Regex demo

Как указывает @ iBug , если вы хотите только сопоставить символы слова или пробел, вы можете заменить (.*?) на ([\w ]+)

0 голосов
/ 21 декабря 2018

Просто убедитесь, что всегда соответствует части с датой, например:

(\d+)\s(\d+)\s(\w+\s?\w+)\s\w+\s\d+

будет достаточно.

0 голосов
/ 21 декабря 2018

Учитывая, что вы сказали

После ТЕСТОВОГО ДОКУМЕНТА, это всегда месяц в формате январь-декабрь

Вы можете использовать прогноз, чтобы убедиться, что вы неt соответствует месяцу:

(\d+)\s(\d+)\s(\w+\s?(?!Jan|Feb|Mar|...|Dec)\w+)
                     ^^^^^^^^^^^^^^^^^^^^^^^...

Это гарантирует, что второе слово не начинается с названия месяца.

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