Domanda

Mi chiedo il motivo per cui la seguente espressione regolare non corrisponde.

string query = "\"1 2\" 3";
string pattern = string.Format(@"\b{0}\b", Regex.Escape("\"1 2\""));
string repl = Regex.Replace(query, pattern, "", RegexOptions.CultureInvariant);

Si noti che se tolgo i caratteri di confine di parola (\ b) da pattern, corrisponde bene. C'è qualcosa di '\ b' che potrebbero essere inciampare questo?

È stato utile?

Soluzione

Una citazione non è un carattere di parola, così \ b non sarà un match se è lì. Non v'è alcun carattere di parola prima della citazione; così, prima che la citazione, non v'è alcuna transizione tra i personaggi di parole e caratteri non-parola. Quindi, nessuna corrispondenza.

Dal tuo commento si sta tentando di rimuovere i caratteri di parola da una stringa. Il modo più semplice per farlo sarebbe quello di sostituire \w con una stringa vuota:

string repl = Regex.Replace(query, "\w", "", RegexOptions.CultureInvariant);

Altri suggerimenti

ci si aspetta uno spazio bianco. non è trovare uno. sostituire

string query = "\"1 2\" 3";

con

string query = "\" 1 2 \" 3";

e vedrete quello che voglio dire.

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