2010-12-21 1 views
0

J'ai un peu de mal avec mon regex.C# problème Regex

String a = @"{target=}jump"; 
String b = "continue"; 
String c = "jump"; 
String d = @"{target=intro}jump"; 
String e = "prev"; 
String f = @"{target=}choice"; 
String g = @"{target=intro}choice"; 
String h = "choice"; 
String i = "previous"; 
String j = @"{target=intro}continue"; 
String k = "cont"; 
String l = @"{target=}continue"; 
Regex regex = new Regex(@"(^{target=(\w.*)}(choice|jump))|(^[^.]*(continue|previous))"); 
var a_res = regex.IsMatch(a); 
var b_res = regex.IsMatch(b); 
var c_res = regex.IsMatch(c); 
var d_res = regex.IsMatch(d); 
var e_res = regex.IsMatch(e); 
var f_res = regex.IsMatch(f); 
var g_res = regex.IsMatch(g); 
var h_res = regex.IsMatch(h); 
var i_res = regex.IsMatch(i); 
var j_res = regex.IsMatch(j); 
var k_res = regex.IsMatch(k); 
var l_res = regex.IsMatch(l); 

Fondamentalement, ce que j'ai besoin est d'obtenir un match lorsque le choix ou saut est présent qu'il est procédé par {target =} avec un nombre quelconque de caractères après le signe =. Et aussi de faire correspondre si continuer ou précédent sont présents mais seulement si ils sont poursuivis par rien. Donc A = faux, b = vrai, c = faux, d = vrai, e = faux, f = faux, g = vrai, h = faux, i = vrai, j = faux, k = faux et l == false,

avec mon regex ci-dessus j'ai une lecture correcte pour tout bar j et l.

Quelqu'un peut-il aider s'il vous plaît?

+0

vous avez posté des réponses qui devraient être des commentaires. Je pense que vous pouvez toujours les supprimer et les mettre en commentaires. Si je commente les réponses, vous ne pourrez peut-être pas les supprimer. –

+0

En fait, vous pouvez supprimer votre réponse indépendamment, je confondais la procédure de suppression des questions avec la procédure de suppression des réponses. –

Répondre

1

Je pense que vous voulez remplacer

{target=(\w.*)} 

avec

{target=[^}]*} 

Cela permet un certain nombre de caractères non} après la "target =".

EDIT: En fait, pourriez-vous s'il vous plaît clarifier votre sens? Je comprends du contexte que

"A = faux, b = vrai, c = faux, d = vrai, e = faux, f = faux, g = vrai, h = faux, i = vrai, j = faux, k = false et l = false "

sont les attendues valeurs (plutôt que réelle .. vous devriez le mentionner explicitement pour plus de clarté). Mais selon votre description verbale, l (correction: a et f) devrait être vrai, pas faux.

En outre, j'allais sur une base de "réparer une erreur à la fois". Mon regex donne toujours j vrai, même si cela devrait être faux sur la base de votre description verbale. Je vais faire une autre édition sous peu.

EDIT 2: Je crois que ce que vous recherchez est-

^({target=[^}]+}(choice|jump)|continue|previous) 

EDIT 3: Désolé modifier tant de fois, mais je dois dire que la prise de la première } après la = est une hypothèse (quoique commun et souvent pratique). Une suite de tests plus complète indiquerait si

{target=}}choice 

devrait correspondre.

+0

ne correspond pas à cela? – Shannow

+0

@Snownow 0 est un nombre. Si vous voulez interdire 0, vous devez le dire, comme dans "tout nombre de caractères différent de zéro". –

0

similaires à la réponse de Mitch, mais:

{target=[^}]+} 

Cela devrait correspondre à au moins 1 caractère non}.