Perché questa espressione regolare non corrisponde a uno spazio?
-
05-07-2019 - |
Domanda
Ho la seguente espressione regolare:
([0-9]+),'(.)':([0-9]+),(L|R|'.')
Corrisponde perfettamente a questo:
1,'a':1,R
Tuttavia, se sostituisco a con uno spazio, fallisce:
1,' ':1,R
Perché . non corrisponde? Uno spazio non è classificato come personaggio? Non riesco a usare \ s perché non voglio abbinare le schede e le interruzioni di riga. Ho anche provato:
([0-9]+),'(.| )':([0-9]+),(L|R|'.')
Ma neanche questo funziona (e non ho IgnorePatternWhitespace
abilitato).
Soluzione
Non riesco a riprodurre ciò che vedi:
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"));
}
}
stampa " True " ;.
È possibile che tu abbia anche un altro personaggio tra le virgolette? Qualche personaggio non stampabile? Da dove proviene il testo?
Potresti provare a cambiarlo in:
([0-9]+),'([^']+)':([0-9]+),(L|R|'.')
in modo che possa corrispondere a più di un carattere tra virgolette.
Altri suggerimenti
Non ho provato in .NET, ma il punto è specifico del linguaggio e dell'implementazione. Prova:
([0-9]+),'([.| ])':([0-9]+),(L|R|'.')
Utilizza \ 0x0020 che corrisponderà a un singolo carattere spazio.