RegEx: найти всё, кроме года в конце строки
Есть строка типа "любые буквы, пробелы и цифры, годы, но в конце стоит пробел и год из 4 цифр" Мне для замены нужно выделить всё до года, включая последний пробел.
Например, из строки текст 123 2024 текст 2012 text 1999 должно остаться только 1999. Строки могут быть без года в конце (тогда результат - пустая строка). Перерыл все подобные темы, но не нашёл именно своего варианта. Пробовал что-то вроде [^\d{4}]$, но разумеется это не работает.
Подскажите, пожалуйста
Ответы (3 шт):
Регулярное выражение [^\d{4}]$ находит любой символ, отличный от цифры, { и } в конце строки.
Найти любой символ, кроме четырёх цифр в конце строки (чтобы удалить, например), можно с помощью
(\d{4})$|.
Заменить нужно на $1, то есть текстом из первой захваченной подмаски.
(\d{4})$- четыре цифры ((\d{4}), содержимое подмаски №1) в конце строки ($)|- или.- любой символ, кроме перехода на новую строку.
Другой вариант
^(?:(?!\d{4}$).)+
См. пример работы этого выражения. Тут
^- находит начало строки(?:(?!\d{4}$).)+- один и более повторов (как можно больше) любого символа, кроме перехода на новую строку, который не является начало подстроки, состоящей из четырёх цифр в конце строки.
Вроде бы захват групп везде работает - попробуйте ^(.+)(\d{4})$, в первой группе $1 будет текст, во второй $2 - год.
Пример - https://regex101.com/r/abzkPw/3