Pergunta

Gostaria de coincidir com a hora (10.00) a partir de uma string com a data e hora ( "21.01.08 10,00"). Eu estou usando a seguinte expressão regular:

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

Mas isso corresponde 21,01 a partir de 21.01.08 e 10.00.

Eu estou usando PCRE como meu mecanismo de expressão regualar.

Update:

Me desculpe, eu deveria ter mais sido mais claro. Os dados e tempo são parte de uma cadeia maior. Eu quero extrair o tempo de que string.

Por exemplo:

"Em 21.01.08, das 10h00 um partido terá lugar na biblioteca" "21.08.08 - Às 10:00 haverá uma festa" "Em 21.08.08 você está programado para um .... O ... terá início às 10.00"

Isso é possível?

Foi útil?

Solução

Seu regex original não fez trabalho porque \b (limite de palavra) corresponde ao "". em "21.01.08". Você precisa do código das fronteiras mais robusta:

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

Isto captura o tempo, em qualquer uma das notações que você usou, enquanto excluindo datas. Note que ele não validar o tempo. Por exemplo, ela corresponderá a "88:99" Validando o tempo é possível, mas complica o padrão significativamente e é provável que seja um exagero para a maioria das situações.

Seria bom usar um olhar-behind em vez da não-captura não suporte de largura variável olhar-behind agrupamento mas PCRE fazer.

Outras dicas

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

deve fazer o truque com a parte da hora de ser colocado em um grupo de captura.

"nova RegExp" Eu não tenho certeza sobre (Java talvez?). Em Perl você poderia obter o valor como ...

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

em .NET o seguinte deve funcionar ...

  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();

Você também pode usar um Nomeado Captura se você quiser usar algo menos ambíguo então o índice para o grupo de captura.

tente usar

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

$ indica o fim de corda

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top