2012-04-30 4 views
-3

J'essaie de créer une regex qui lit une chaîne, et si le dernier caractère est quelque chose comme! "£ $% etc, il ignore le dernier caractère, lit la chaîne (pour permettre à mon code de chercher dans une classe de dictionnaire) et délivre alors la chaîne, avec le caractère à la fin, il a ignoré. Est-ce vraiment possible, ou dois-je simplement supprimer le dernier caractère?String Regex Aide C#

jusqu'à présent ...

foreach(var line in yourReader) 
{ 
    var dict = new Dictionary<string,string>(); // your replacement dictionaries 
    foreach(var kvp in dict) 
    { 
     System.Text.RegularExpressions.Regex.Replace(line,"(\s|,|\.|:|\\t)" + kvp.Key + "(\s|,|\.|:|\\t)","\0" + kvp.Value + "\1"); 
    } 
} 

J'ai aussi dit d'essayer ce

var trans = textbox1.Text; 

foreach (var kvp in d) //d is my dictionary so use yours 
{ 
    trans = trans.Replace(kvp.Key, kvp.Value); 
} 

textbox2.Text = trans; 

mais n'ont littéralement aucune idée de ce qu'il fait

+2

Veuillez modifier votre question pour ajouter les détails. Ne faites pas ça dans les commentaires. – Oded

+0

Je recommande d'utiliser cette feuille de triche pratique des expressions reg ex: http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet – GeorgePotter

Répondre

2

Je ne trouve pas de point à l'aide Regex, donc j'espère que cela aidera:

 const int ARRAY_OFFSET = 1; 

     List<char> ForbiddenChars = new List<char>() 
     { 
      '!', '@', '#', '$', '%', '^', '&', '*', '£' //Add more if you'd like 
     }; 

     string myString = "Hello World!&"; 

     foreach (var forbiddenChar in ForbiddenChars) 
     { 
      if (myString[myString.Length - ARRAY_OFFSET] == forbiddenChar) 
      { 
       myString = myString.Remove(myString.Length - ARRAY_OFFSET); 
       break; 
      } 
     } 

Edit:

J'ai vérifié l'ancien code, et il avait un problème: lorsque les derniers caractères "interdits" de la chaîne étaient dans l'ordre du tableau ForbiddenChars, ils les supprimaient tous. si votre chaîne était "Hello World &!" il supprimerait les deux! et &. donc j'ai mis un break; et ce ne sera plus un problème.

+0

parfait! merci de m'avoir poussé dans la bonne direction. J'ai besoin d'ajouter ce que le caractère interdit est à une variable pour que je puisse l'ajouter à la fin, mais je sais comment le faire maintenant, alors merci! –

+0

@JordanMoffat Mon plaisir. J'ai dû corriger ma réponse, donc s'il vous plaît vérifier la modification. il suffisait d'ajouter une "pause"; Une fois le 'si 'arrivé. – MasterMastic

1

Jetez un oeil à Regex.Replace. Une expression régulière telle que [!"£$%]$ devrait faire ce dont vous avez besoin.

0

Dans votre cas, je vous recommande d'utiliser l'expression regex pour une série de caractères pour enlever le "£ $% etc.

La façon dont vous voudriez utiliser dans votre cas serait quelque chose comme :

"<the bit you want to capture>(?:[!-%]\\r)" 

le symbôle peu (?:[!-%]\\r), mais ne stocke pas, un caractère unique dans la gamme -

% qui vient juste avant un caractère de retour de voiture, je recommande également d'utiliser cette antisèche pratique de reg!. ex expressions:

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet