Подходит ли этот RE для цели? :
'\A(\*|(?!190[01])).*'
\ A означает «начало строки». Я думаю, что то же самое в регулярных выражениях Java
.
EDIT
\A
: "с самого начала строки ....". В Python (что на самом деле мне известно) это можно опустить, если мы используем функцию match()
, которая всегда анализирует с самого начала, вместо search()
, которая ищет всюду в строке. Если вы хотите, чтобы регулярное выражение могло анализировать строки с самого начала каждой строки, это должно быть заменено на ^
(...|...)
: ".... должен быть один из двух следующих параметров: ....."
\*
: «... первый вариант - только один символ, звезда; ...». Поскольку звезда - это специальный символ, означающий 'ноль, один или несколько раз больше, чем' в строках регулярного выражения, она должна быть экранирована, чтобы строго означать 'звезду' .
(?!190[01])
: "... второй вариант - это не шаблон, который должен быть найден и, возможно, перехвачен, а шаблон, который должен отсутствовать (все еще после самого начала). ...". Два символа ?!
- это то, что говорит , 'не должно быть следующих символов' . Не найденный шаблон состоит из 4 целых символов: '1900' или '1901' .
(?!.......)
- негативное прогнозное утверждение. Все виды утверждений начинаются с (?
: круглые скобки сводят на нет привычное значение ?
, поэтому все утверждения всегда пишутся с круглыми скобками.
Если \*
соответствует, один символ был израсходован. Напротив, если утверждение проверено, соответствующие 4 первых символа строки не были использованы: двигатель регулярного выражения прошел через проанализированную строку до 4-го символа, чтобы проверить их, а затем вернулся к исходному состоянию. положение, то есть, в настоящее время, в самом начале строки.
Если вы хотите, чтобы необязательная часть (...|...)
не была группой захвата, вы напишите ?:
сразу после первого соединения, тогда '\A(?:\*|(?!190[01])).*'
.*
: После начального шаблона (одна звезда поймана / совпала или подтверждено утверждение) двигатель регулярного выражения работает и перехватывает все символы до конца строки. Если в строке есть символы новой строки, и вы хотите, чтобы регулярное выражение перехватывало все символы до конца строки, а не только строки, вы укажете, что .
также должно соответствовать символам новой строки (в Python это с re.MULTILINE ), или вы замените .*
на (.|\r|\n)*
Наконец-то я понимаю, что вы, очевидно, хотите ловить строки, состоящие из цифр. В этом случае RE необходимо изменить на '\A(?:\*|(?!190[01]))\d*'
. Этот RE совпадает с пустыми строками. Если вы хотите, чтобы не совпадало с пустыми строками, вместо \d*
введите \d+
. Если вы хотите, чтобы только строки имели хотя бы одну цифру, даже после звездочки, когда она начинается со звездочки, сопоставьте, затем выполните '\A(?:\*|(?!190[01]))(?=\d)\d*'