2009-11-10 14 views
1

Je travaille sur des documents html en utilisant le contrôle WebBrowser, j'ai besoin de faire un utilitaire qui cherche un mot et le met en évidence dans le navigateur. Cela fonctionne bien si la chaîne est en anglais, mais pour les chaînes dans d'autres langues, par exemple en coréen, cela ne semble pas fonctionner.Rechercher des chaînes MultiByte en utilisant RegEx

Le scénario où le code ci-dessous mentionné fonctionne est-

Tenir compte utilisateur a sélectionné dans la page Web un mot « exemple », maintenant je dois souligner ce mot et toutes ses occurences. Aussi j'ai besoin de calculer leur byteOffset (l'extrait de code fait cela seulement).

Maintenant, pour la langue anglaise, le code ci-dessous fonctionne bien, mais pour des langues comme le coréen, cela ne fonctionne pas du tout.

son pas pénétrer à l'intérieur de la boucle for-each

foreach (Match m in reg.Matches(this._documentContent))    

ici _documentContent contient la source de la page Web sous forme de chaîne. OccurenceNo est le no. d'occurence de mot sélectionné dans le document

Voici le code, strTemp contient la chaîne coréenne:

string strTemp = myRange.text; 
string strExp [email protected]">(([^<])*?)" + strTemp + "(([^<])*?)<"; 

int intCount =0; 
Regex reg = new Regex(strExp); 
Regex reg1 = new Regex(strTemp); 
foreach (Match m in reg.Matches(this._documentContent)) 
{ 
    string strMatch = m.Value; 
    foreach (Match m2 in reg.Matches(strMatch)) 
    { 
     intCount += 1; 
     if (intCount==OccurenceNo) 
     { 
      int intCharOffset = m.Index + m2.Index; 
      System.Text.UTF8Encoding d = new System.Text.UTF8Encoding(); 
      int intByteOffset = d.GetBytes(_documentContent.Substring(1, intCharOffset)).Length; 
     } 
    } 
} 
+0

montrant le code réel aiderait probablement ... – RageZ

+4

pouvez-vous écrire du code. C# est unicode, aussi longtemps que votre encodage est correctement lu, vous devriez être capable de faire n'importe quoi avec les chaînes. –

Répondre

0

Si le code fonctionne pour les mots anglais, mais ne puis renvoie aucun résultat pour la Corée, je pourrais suggérer que il est une question de culture, de sorte que vous pourriez essayer de régler les RegexOptions à CultureInvariant:

Regex reg = new Regex(strExp, RegexOptions.CultureInvariant); 
Regex reg1 = new Regex(strTemp, RegexOptions.CultureInvariant); 
0

J'utilise le code suivant pour RegEx coréen:

private static readonly Regex regexKorean = new Regex(@"[가-힣]"); 
public static bool IsKorean(this char s) 
{ 
    return regexKorean.IsMatch(s.ToString()); 
} 

if (someText.Any(z => z.IsKorean())) 
{ 
    DoSomething(); 
}