2014-05-21 6 views
1

Je suis nouveau à l'expression régulière. Ce que je veux archiver est de vérifier si un texte de chaîne correspond au modèle suivant.chaîne de correspondance regex agasint un motif

"xxx(name="yyy", country="yyy")" 

Modifié: xxx peuvent être des lettres ou des chiffres d'une longueur quelconque, mais doit commencer par une lettre. yyy peut être n'importe quels caractères de n'importe quelle longueur. Il peut y avoir zéro ou n'importe quel nombre d'espaces blancs entre "," et "pays".

Par exemple, ce qui suit est une chaîne valide

"TargetVal(name="White House", country="US")" 

les chaînes suivantes ne sont pas valides

"TargetVal(name="White House", country="US")+546+!!!" 
"343TargetVal(name="White House", country="US")" 
"!TargetVal(name="White House", country="US")" 
"CenterVal(name="Green House",789808 country="US")" 
"CenterVal(name="Green House", country="US", dfjl)" 
"OuterVal(name=Green House, country="US")" 

Voici ce que je l'ai fait jusqu'à présent dans C#

var formula = @"TargetVal(name=""White House"", country=""US"")"; 
var pattern = @"\w\(name=""\w"",\sccy=""\w""\)"; 
ismatching= Regex.IsMatch(formula, pattern, RegexOptions.IgnoreCase); 

Évidemment, cela ne fonctionne pas contre toutes les règles spécifiées. Quelqu'un peut-il donner un indice?

+0

classes de personnages comme regex '\' s' et correspondre de \ de W' exactement un caractère, sauf si vous ajoutez des modificateurs. Donc, dans votre exemple, vous recherchez exactement un caractère de mot, exactement un espace, et ainsi de suite. Utilisez des modificateurs comme '*' (correspondent à 0 ou plus) et '+' (correspondent à un ou plusieurs). – duncan

+0

Une façon de construire une regex, en particulier si vous commencez tout juste, est de commencer par votre chaîne exacte. Assurez-vous qu'il correspond bien. Commencez ensuite à remplacer les valeurs constantes par des termes regex. – duncan

+0

Merci, c'est une suggestion très utile – wd113

Répondre

0

Vous pouvez utiliser l'expression régulière suivante.

var rgx = new Regex(@"(?i)^[a-z][a-z0-9]+\(name="".*?"",\s*country="".*?""\)$"); 

Voir Demo

+0

merci, cela fonctionne. – wd113

0

essayer var pattern = "^[a-zA-Z][a-zA-Z0-9 ]+\\(name=\"[a-zA-Z][a-zA-Z0-9 ]+\",\\s*country=\"[a-zA-Z][a-zA-Z0-9 ]+\"\\)$";

J'ai fait l'hypothèse, que votre xxx n'existe pas seulement de lettres et de chiffres, mais peuvent inclure des espaces (comme White House les inclut).

Questions connexes