REGEX пытается извлечь значение, если найден символ - PullRequest
0 голосов
/ 06 апреля 2020

Для того, что я делаю, у меня назначена встреча (12:15) или диапазон (10:15 - 11:00). Если у меня есть диапазон, я не хочу ничего делать, но если это назначенная встреча, я хочу выбрать время. Я попытался использовать вид сзади, чтобы увидеть, есть ли «-», но не смог заставить его работать. Любая помощь?

1 Ответ

0 голосов
/ 06 апреля 2020

Было бы неплохо, если бы у вас был пример текста того, что вы делаете, а вы не хотите, чтобы он совпадал.

Я просто собираюсь использовать текст вашего вопроса, поскольку больше ничего не нужно использовать.

\b(?<![012\s][0-9]:[0-5][0-9]-)(?<![012\s][0-9]:[0-5][0-9] - )(?:[01]?[0-9]|2[0-3]|24(?=:00)):[0-5][0-9]\b(?!\s*-\s*[012]?[0-9]:[0-5][0-9]\b)

Пояснение (см. Также regex101 demo & объяснение ):

  • \b - это граница слова (нулевая ширина, ровно одна сторона должна соответствовать \w для символа слова)
  • (?<!…) отрицательный отстающий (шаблон фиксированной ширины, который должен не предшествовать текущему местоположению)
    • [012\s] ноль, один, два или пробел
    • [0-9]:[0-5][0-9] ди git, двоеточие, ди git между 0-5 включительно и еще один ди git
    • - да sh
  • (?<!…) еще один негативный взгляд (с другой шириной)
    • [012\s] ноль, один, два или пробел
    • [0-9]:[0-5][0-9] ди git, двоеточие, ди git между 0-5 включительно и еще один ди git
    • - пробел, да sh и еще один пробел
  • (?:…|…|…) группировка без захвата, поэтому у нас могут быть изменения (соответствуют любым из этих трех):
    • [01]?[0-9] чередование 1: необязательный ведущий 0 или 1, затем ди git
    • 2[0-3] чередование 2: два и затем ди git между 0 и 3
    • 24(?=:00) чередование 3: 24, которое должно предшествовать :00 (положительный прогноз) )
  • :[0-5][0-9]\b двоеточие, ди git от 0-5, еще один ди git и граница слова
  • (?!…) негативный вид - впереди (текст этой точки должен , а не соответствовать этому прогнозу)
  • \s*-\s* любое расстояние, да sh, любое расстояние
  • [012]?[0-9]:[0-5][0-9]\b a 0, 1 или 2, затем любой ди git, двоеточие и т. д. c.

Я немного сократил свои взгляды. Они будут соответствовать 25:50 например. Фактическое совпадение является более точным c и будет совпадать только с 00:00 до 24:00.

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