Заглянуть за загадку ИЛИ, может быть, группы? - PullRequest
0 голосов
/ 22 февраля 2019

Извините, я не могу сформулировать хороший вопрос:

Это регулярное выражение должно найти слово 'period', за которым следует пробел и одна цифра:

period.*(?=\s[0-9]{1})|alternative

Если я введустрока TEST 2019 to period 3.csv регулярное выражение соответствует period.

Если я введу строку TEST period 3 2019.csv, регулярное выражение соответствует period 3.

Мое предполагаемое совпадение равно period 3

Вы можете увидеть, что я имею в виду из этого скриншота из regex101:

Пока что я решил это с положительным взглядом позади.например:

(?<=period\s)[0-9]{1,4}|alternative

Это соответствует цифре после «периода», и я могу просто добавить «период» для моей конкретной цели.Но я не понимаю, почему у меня разные совпадения.

1 Ответ

0 голосов
/ 22 февраля 2019

Вам не нужно .* после периода, поэтому просто удалите его из своего регулярного выражения и напишите его так:

period(?=\s[0-9]{1})|alternative

Это соответствует period буквально, за которым следует пробел иномер (обеспеченный вашим положительным взглядом вперед).Кроме того, вам действительно не нужно писать {1}, так как это по умолчанию и является избыточным.Также, если вы не хотите, чтобы точка в частичном тексте частично совпадала, используйте границу слова \b перед ним и измените свое регулярное выражение на следующее:

\bperiod(?=\s[0-9])|alternative

Демо

Кроме того, ваш взгляд за (?<=period\s)[0-9]{1,4}|alternative не подходит для совпадения с текстом period, и действительно, этот взгляд будет совпадать только с числом, которому предшествует period и одним пробелом.

Проверьте эту демонстрацию

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