2010-09-09 6 views
2

Ceci est ma deuxième tentative d'obtenir cette réponse que je foiré première fois: s Comme vous pouvez le deviner Im nouveau à regexC# Regex besoin modèle pour string match

essentiellement, la chaîne contient beaucoup de mots séparés par "\". donc par exemple

\gyifgy8i\gyigyi9g\player_0\k1ng*tar%\gp86gg78.\g79g\player_1\th3dadY>\gyigyigiy\huiohgiu\player_2\j0k$r\g68g6o9g\987pgh890\player_3\PLAYERNAME 

J'ai besoin d'un motif qui peut correspondre à chaque mot après \ player_n \, où n est un nombre. donc à partir de ce qui précède, je veux faire correspondre k1ng * tar% et th3dadY> et j0k $ r (sans le \ de chaque côté). ce sont les noms de joueurs d'une requête UDP, la requête udp sperate chaque valeur avec "\". Chaque nom de joueur est toujours précédé de \ player_n \ comme vous pouvez le voir ci-dessus.

à l'origine on m'a conseillé d'utiliser:

string rex = @"[\w]*[\\]player_[0-9]+[\\](?<name>[A-Za-z0-9]*)\b"; 
     Regex re = new Regex(rex); 


      for (Match m = re.Match(stringData); m.Success; m = m.NextMatch()) 
     { 

      players[count] = (m.Groups["name"]).ToString(); 
      textBox1.Text += players[count] + "\r\n"; 
      MessageBox.Show((m.Groups["name"]).ToString()); 
     } 

Le schéma ci-dessus fonctionne un peu, mais seulement si le playername utilise A-Za-z0-9. Je n'ai pas réalisé à ce moment que le nom de joueur peut contenir n'importe quel caractère. Quelqu'un peut-il modifier ce modèle pour moi s'il vous plaît, regex est au-delà de moi: <

Merci d'avance.

Répondre

3

fourni le reste des travaux regex comme vous le souhaitez, vous pouvez remplacer

(?<name>[A-Za-z0-9]*) 

avec

(?<name>[^\\]*) 

qui correspondre à tout sauf \

+0

c'était mieux, mais pas encore à 100% , j'ai eu un meilleur résultat mais j'ai juste couru l'application maintenant, la chaîne d'UDP a eu quelques playernames obscurs, par exemple: VM_C) - (r! s.cl et: dezerTer // cl. aucun de ces noms ont été assortis par votre nouvelle regex: brux

+0

sry, cela fonctionne réellement ... son smt à faire avec la chaîne de retour de udp, pour une raison quelconque udpclient nous ne pas recevoir la chaîne complète: s – brux