Сопоставление строки времени с регулярным выражением

StackOverflow https://stackoverflow.com/questions/209192

  •  03-07-2019
  •  | 
  •  

Вопрос

Я хотел бы сопоставить время (10.00) из строки с датой и временем («21.01.08 10.00»).Я использую следующее регулярное выражение:

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}\\b" "g");

Но это соответствует 21.01 с 21.01.08 и 10.00.

Я использую PCRE в качестве механизма регулярных выражений.

Обновлять:

Извините, мне следовало бы быть более ясным.Данные и время являются частью более крупной строки.Я хочу извлечь время из этой строки.

Например:

«21.01.08 с 10.00 в библиотеке будет проходить вечеринка» «21.08.08 - в 10:00 будет вечеринка» 21.08.08, вы запланированы на .......начнется в 10.00"

Это возможно?

Это было полезно?

Решение

Ваше исходное регулярное выражение не сработало, потому что \b (Граница слова) соответствует «». в «21.01.08». Вам нужно более надежно кодировать границы:

(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])

Это фиксирует время в любой из использованных вами обозначений, исключая даты.Обратите внимание, что он не проверяет время.Например, это будет соответствовать «88:99». Проверка времени возможна, но значительно усложняет шаблон и, вероятно, в большинстве ситуаций будет излишней.

Было бы неплохо использовать просмотр назад вместо группировки без захвата, но PCRE не поддерживает просмотр назад переменной ширины.

Другие советы

^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

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

«новый RegExp», насчет которого я не уверен (возможно, Java?).В Perl вы можете получить значение вроде...

if ("21.01.08 10.00" =~ m/^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$/g) {
  $time_part = $1;
}

в .NET должно работать следующее...

  Regex r = new Regex(@"^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$");
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

Вы также можете использовать Именованный захват если вы хотите использовать что-то менее двусмысленное, тогда индексируйте группу захвата.

попробуйте использовать

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}$" "g");

$ указывает конец строки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top