2010-11-16 3 views
3

Compte tenu de la chaîne:Comment faire match regex dans une chaîne avec des guillemets en C#

/home "1020....2010" main 

Je voudrais home, 1020 et 2010 utilisant l'expression rationnelle, mais gardez à avoir des problèmes avec la citation. Quelqu'un peut m'aider?


Merci les gars pour votre poste. Je me rends compte que mon code pourrait avoir un problème. Ici, il est

motif de chaîne [1] = @ "blablabla"; motif de chaîne [2] = @ "blablabla"; ......

foreach (string s dans le modèle) { si (Regex.Match (ligne, s) .success) {...... }}

Ensuite, il y a une erreur disant caractère inattendu "\"

+2

Pourquoi ne pas le faire correspondre sans capturer les citations – jball

Répondre

6

Utilisez le modèle:

/(\w+)\s+"(\d+)\.+(\d+)" 

Et home (ou tout autre nom après la /) sera en $1, le premier numéro $2 et le dernier numéro dans $3.

EDIT 1

Je pensais que le @ devrait fonctionner, mais ne pouvait pas le compiler dans ideone.com. Cela ne fonctionne cependant:

using System; 
using System.Text.RegularExpressions; 

public class RegexTest 
{ 
    public static void Main() 
    { 
     Regex r = new Regex("/(\\w+)\\s+\"(\\d+)\\.+(\\d+)\""); 
     Match m = r.Match("/home \"1020....2010\" main "); 
     Console.WriteLine("$1 = " + m.Groups[1]); 
     Console.WriteLine("$2 = " + m.Groups[2]); 
     Console.WriteLine("$3 = " + m.Groups[3]); 
    } 
} 

produit:

$1 = home 
$2 = 1020 
$3 = 2010 

Banc d'essai: http://ideone.com/TpQwf

EDIT 2

Comme @Seattle mentionné dans les commentaires, lors de l'utilisation du @ pratique avant une chaîne regex, les guillemets doivent être échappés en plaçant une double citation devant de celui-ci (et non une barre oblique inverse!):

Regex r = new Regex(@"/(\w+)\s+""(\d+)\.+(\d+)"""); 
+0

Merci, mais il ne cesse de me dire l'erreur "Caractère inattendu" \ "" – Mavershang

+4

le symbole '@' exige que les citations soient échappées différemment. '@"/(\ w +) \ s + "" (\ d +) \. + (\ d +) "" "' –

+0

@Seattle, à votre santé! –

0

Pour ce qui précède, vous voulez quelque chose comme:

/(\w+) "(\d+)\.+(\d+)" (\w+) 

vérifiez aussi ceci:

+0

Pourquoi créer une classe de caractères de la citation?Et ne voudriez-vous pas regrouper les correspondances '\ w +' et '\ d +'? –

+0

@Bart Vous avez raison, corrigé. Merci! –

+0

De rien, bien sûr! Notez que dans l'exemple de l'OP, il y a plus d'un espace après 'home'. Si vous corrigez cela, vous aurez copié ma réponse. :) –

0

Si vous voulez faire correspondre un caractère de citation (ou d'autres caractères spéciaux), vous pouvez échapper à l'aide d'une barre oblique inverse. Donc, \" dans votre regex correspondra à un "caractère

Questions connexes