2010-03-15 5 views
1

Je me demande pourquoi l'expression rationnelle suivante ne correspond pas.L'utilisation de b dans les expressions régulières C# ne fonctionne pas?

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

Notez que si je retire le mot caractères limites (\ b) de pattern, elle correspond bien. Y at-il quelque chose à propos de '\ b' qui pourrait trébucher?

+1

Qu'essayez-vous d'accomplir? – Gumbo

+1

Je veux juste supprimer des mots d'une chaîne, aussi simple que cela. – Nikhil

Répondre

3

Une citation n'est pas un caractère de mot, donc \ b ne sera pas une correspondance si elle est là. Il n'y a pas de caractère de mot avant la citation; donc, avant la citation, il n'y a pas de transition entre les caractères de mot et les caractères non-mots. Donc, pas de correspondance. À partir de votre commentaire, vous essayez de supprimer des caractères de mot d'une chaîne.

Le moyen le plus simple de le faire serait de remplacer \w par une chaîne vide:

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

J'essaye d'enlever des mots (que j'ai lus d'un fichier), pas des caractères de mot. J'utilise maintenant 'string pattern = string.Format (@" (^ | \ W +) {0} (\ W + | $) ", Regex.Escape (" \ "1 2 \" "));' ce qui semble bien fonctionner. – Nikhil

0

vous attendez un espace. il n'en trouve pas. remplacer

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

avec

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

et vous verrez ce que je veux dire.

Questions connexes