2012-08-03 6 views
0

Je lis dans un fichier et vérifie le contenu du fichier en vérifiant chaque ligne. Les lignes de cordes ressemblent à ceci:regex pour faire correspondre une chaîne qui contient des parenthèses

CMD: [THIS_IS_THE_CMD]
DELAY: [5]
FLAGS: [ANY]

Tout ce que je dois vérifier est que la ligne suit cette forme exacte et ce qui est entre les crochets est soit du texte (j'ai essayé [ A-Z_] mais ça ne marche pas) ou un nombre dépendant de la ligne.
Ce que j'ai jusqu'à présent:

string line = "CMD: [THIS_IS_THE_CMD]"; 
if(!VerifyLine(@"^CMD: \[", line)) 
{ 
    // No match, set error  
} 

private static bool VerifyLine(string regExp, string line) 
{ 
    Regex reg = new Regex(regExp); 
    return reg.IsMatch(line); 
} 

Mais cela ne vérifie pas le contenu entre les crochets et il ne vérifie pas pour le support de fermeture.

Répondre

2

Cela devrait le faire pour vous:

([A-Z_]*):\s*\[(\w*)\] 

Le premier groupe correspond à la partie avant les deux points, la deuxième correspond à la partie à l'intérieur des [] s.

La première partie peut être une lettre majuscule ou un trait de soulignement, la deuxième partie peut être n'importe quel caractère alphanumérique ou un trait de soulignement.

De plus, vous pouvez utiliser les extras suivants, qui nécessitent l'option qui fait^EOL match de $ au lieu d'BOF et EOF:

^([A-Z_]*):\s*\[(\w*)\]$  // will only match whole lines 
^\s*([A-Z_]*):\s*\[(\w*)\]\s*$ // same as above but ignores extra whitespace 
           // on the beginning and end of lines 

différentes choses que vous pourriez utiliser pour capturer les groupes en fonction de votre dossier Format:

[A-Z]  // matches any capital letter 
[A-Za-z] // matches any letter 
[A-Za-z0-9] // matches any alphanumeric character 
\w   // matches any "word character", which is any alnum character or _ 
+0

Vous pouvez ajouter '^' et '$' pour assurer la ligne entière correspond et non pas seulement que la ligne contient que regex et '?:' ne pas capturer de groupes (puisqu'ils ne seront pas utilisés de toute façon). – R0MANARMY

+0

C'est dans l'un de mes extras. Je vais quitter les groupes parce que qui sait, il pourrait les utiliser plus tard. – Wug

0

essayer avec ceci: ^\w+:\s*\[(\w+)\], \w correspondra alphabet, chiffres, et soulignent
et un autre motif correspondra majuscules seulement: ^[A-Z\d_]+:\s*\[([A-Z\d_]+)\]

0

Vous avez essayé ^CMD: \[, mais votre Regex contient Espace. Notez que dans regex vous devez utiliser \s pour faire correspondre les espaces blancs. essayez votre regex mais en utilisant \s:

if(!VerifyLine(@"^CMD:\s*\[", line)) 
    ... 

expliquer:

\s Matches any white-space character. 
*  Matches the previous element zero or more times. 
Questions connexes