Pourquoi cette expression régulière ne correspond-elle pas à un espace?
-
05-07-2019 - |
Question
J'ai l'expression régulière suivante:
([0-9]+),'(.)':([0-9]+),(L|R|'.')
Cela correspond parfaitement à ça:
1,'a':1,R
Toutefois, si je remplace un par un espace, il échouera:
1,' ':1,R
Pourquoi . ne correspond-il pas? Un espace n'est-il pas classé comme un personnage? Je ne peux pas utiliser \ s car je ne souhaite pas faire correspondre les tabulations et les sauts de ligne. J'ai aussi essayé:
([0-9]+),'(.| )':([0-9]+),(L|R|'.')
Mais cela ne fonctionne pas non plus (et je n'ai pas IgnorePatternWhitespace
activé).
La solution
Je ne peux pas reproduire ce que vous voyez:
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 "vrai".
Est-il possible que vous ayez également un autre caractère entre les guillemets? Un personnage non imprimable? D'où vient le texte?
Vous pouvez essayer de le changer en:
([0-9]+),'([^']+)':([0-9]+),(L|R|'.')
afin qu'il puisse faire correspondre plus d'un caractère entre les guillemets.
Autres conseils
Je n'ai pas essayé .NET, mais le point est spécifique au langage et à l'implémentation. Essayez:
([0-9]+),'([.| ])':([0-9]+),(L|R|'.')
Utilisez \ 0x0020 pour faire correspondre un seul caractère d'espacement.