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é).

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top