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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top