Я хотел бы сопоставить время (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»
Это возможно?





попробуйте использовать
new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}$" "g");
$ указывает конец строки
^\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();
Вы также можете использовать Именованный захват, если хотите использовать что-то менее неоднозначное, чем индекс в группе захвата.
Возможно, я делаю это по привычке, и я также считаю, что твердое числовое значение яснее, чем подсчет числа \ d escape-последовательностей. Полагаю, это просто мои личные предпочтения.
Ваше исходное регулярное выражение не сработало, потому что \b (граница слова) совпадает с "." в «21.01.08.» Вам нужно более надежно закодировать границы:
(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])
Это фиксирует время в любом из используемых вами обозначений, исключая даты. Обратите внимание, что он не проверяет время. Например, он будет соответствовать «88:99». Проверка времени возможна, но значительно усложняет шаблон и, вероятно, будет излишним для большинства ситуаций.
Было бы неплохо использовать ретроспективный просмотр вместо группировки без захвата, но PCRE не поддерживает ретроспективный просмотр с переменной шириной.
Я не могу не думать, что
\d\dтак же легко читается, как и\d{2}; он еще более экономичен при наборе текста. Если он становится больше 3 (может быть, больше 2), или вам нужен диапазон {3,7}, то повторы отличные.