Por que essa expressão regular não corresponde a um espaço?
-
05-07-2019 - |
Pergunta
Eu tenho a seguinte expressão regular:
([0-9]+),'(.)':([0-9]+),(L|R|'.')
Combina muito bem:
1,'a':1,R
No entanto, se eu substituir uma Com um espaço, falha:
1,' ':1,R
Por que não . combinar? Um espaço não é classificado como personagem? Eu não posso usar s Porque não quero combinar as guias e quebras de linha. Eu também tentei:
([0-9]+),'(.| )':([0-9]+),(L|R|'.')
Mas isso também não funciona (e eu não tenho IgnorePatternWhitespace
ativado).
Solução
Não consigo reproduzir o que você está vendo:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
Regex regex = new Regex("([0-9]+),'(.)':([0-9]+),(L|R|'.')");
Console.WriteLine(regex.IsMatch("1,' ':1,R"));
}
}
Imprime "True".
É possível que você tenha outro personagem entre as citações também? Algum personagem não imprimor? De onde vem o texto?
Você pode tentar alterar para:
([0-9]+),'([^']+)':([0-9]+),(L|R|'.')
Portanto, poderia corresponder a mais de um personagem entre as citações.
Outras dicas
Não tentei no .NET, mas o ponto é específico para linguagem e implementação. Tentar:
([0-9]+),'([.| ])':([0-9]+),(L|R|'.')
Usar 0x0020 que corresponderá a um único personagem espacial.