RegEx: найти всё, кроме года в конце строки

Есть строка типа "любые буквы, пробелы и цифры, годы, но в конце стоит пробел и год из 4 цифр" Мне для замены нужно выделить всё до года, включая последний пробел.

Например, из строки текст 123 2024 текст 2012 text 1999 должно остаться только 1999. Строки могут быть без года в конце (тогда результат - пустая строка). Перерыл все подобные темы, но не нашёл именно своего варианта. Пробовал что-то вроде [^\d{4}]$, но разумеется это не работает.

Подскажите, пожалуйста


Ответы (3 шт):

Автор решения: Sergey Glukhov

попробуйте воспользоваться такой конструкцией "\d{4}"\z

→ Ссылка
Автор решения: Wiktor Stribiżew

Регулярное выражение [^\d{4}]$ находит любой символ, отличный от цифры, { и } в конце строки.

Найти любой символ, кроме четырёх цифр в конце строки (чтобы удалить, например), можно с помощью

(\d{4})$|.

Заменить нужно на $1, то есть текстом из первой захваченной подмаски.

  • (\d{4})$ - четыре цифры ((\d{4}), содержимое подмаски №1) в конце строки ($)
  • | - или
  • . - любой символ, кроме перехода на новую строку.

См. пример работы выражения

Другой вариант

^(?:(?!\d{4}$).)+

См. пример работы этого выражения. Тут

  • ^ - находит начало строки
  • (?:(?!\d{4}$).)+ - один и более повторов (как можно больше) любого символа, кроме перехода на новую строку, который не является начало подстроки, состоящей из четырёх цифр в конце строки.
→ Ссылка
Автор решения: Dmitry Sokolov

Вроде бы захват групп везде работает - попробуйте ^(.+)(\d{4})$, в первой группе $1 будет текст, во второй $2 - год.

Пример - https://regex101.com/r/abzkPw/3

→ Ссылка