2010-03-29 5 views
2

Comment utiliser Regex pour faire correspondre les chaînes Unicode? Je charge quelques mots clés à partir d'un fichier texte et je les utilise avec Regex sur un autre fichier. Les mots-clés contiennent tous deux unicode (tel que á, etc). Je ne suis pas sûr d'où le problème est. Y a-t-il une option que je dois définir?Regex ne correspond pas Unicode


code:

foreach (string currWord in _keywordList) 
{ 
    MatchCollection mCount = Regex.Matches(
     nSearch.InnerHtml, "\\b" + @currWord + "\\b", RegexOptions.IgnoreCase); 

    if (mCount.Count > 0) 
    { 
     wordFound.Add(currWord); 
     MessageBox.Show(@currWord, mCount.ToString()); 
    } 
} 

Et la lecture des mots-clés à une liste:

var rdComp = new StreamReader(opnDiag.FileName); 
string compSplit = rdComp.ReadToEnd() 
         .Replace("\r\n", "\n") 
         .Replace("\n\r", "\n"); 
rdComp.Dispose(); 
string[] compList = compSplit.Split(new[] {'\n'}); 

Puis-je changer le tableau à une liste.

+0

Pouvez-vous poster un extrait de votre code qui est en utilisant l'expression rationnelle? Il peut s'agir d'un problème de charset (par exemple, rien à voir avec regex), ou d'un problème regex, ou ... –

+0

Quelle regex utilisez-vous et comment? Montre du code, s'il te plait. –

+1

Les mots-clés commencent-ils et se terminent-ils toujours par des caractères de mot (c'est-à-dire, des lettres, des chiffres ou des traits de soulignement)? –

Répondre

1

Lors de la correspondance sur un caractère spécifique, je crois que les expressions régulières ne supportent que les littéraux pour le jeu de caractères ASCII. Au-delà, vous pouvez utiliser \ uxxxx pour faire correspondre le point de code Unicode.

Voir here.

+0

Je ne suis pas sûr que ce soit le problème. Il/elle n'utilise pas de classes de caractères mais des chaînes textuelles, entourées de limites de mots. –

+0

@Pietzcker - C'est le problème. Il/elle doit analyser la chaîne et ajouter chaque caractère en tant que point de code Unicode. – mbeckish

+1

Eh bien, je viens d'essayer d'utiliser des littéraux Unicode dans une regex en C#, et cela a parfaitement fonctionné. 'Console.WriteLine (Regex.Replace (" It BӦЯӁ ڀ! ", @" \ BBӦЯӁ ڀ \ b "," fonctionne "));' retourne 'Cela fonctionne!' –

0

Vous pouvez utiliser [\ u0000- \ uffff] + pour correspondre à au moins la BMP

Questions connexes