2009-11-10 3 views
1

Я работаю над html-документами с помощью элемента управления WebBrowser, мне нужно сделать утилиту, которая ищет слово и выделяет его в браузере. Он работает хорошо, если строка находится на английском языке, но для строк на других языках, например, на корейском языке, похоже, что она не работает.Поиск строк MultiByte с использованием RegEx

Сценарий где нижеуказанным код работает IS-

Рассмотрим пользователь выбрал слово «Пример» в веб-страницы, теперь мне нужно, чтобы выделить это слово и все его вхождений. Также мне нужно рассчитать их byteOffset (это только фрагмент кода).

Теперь для английского языка этот код работает отлично, но для таких языков, как корейский, он вообще не работает.

его не попадая внутрь для каждой петли-

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

здесь _documentContent содержит источник веб-страницы в качестве строки. происхождениеNo нет. залегания выбранного слова в документе

Вот код, strTemp содержит корейскую строку:

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

, показывающий фактический код, вероятно, поможет ... – RageZ

+4

вы можете опубликовать код. C# является unicode, поэтому, пока ваша кодировка читается правильно, вы должны иметь возможность делать что-либо со строками. –

ответ

0

Если код работает для английских слов, но не возвращает никаких результатов для корейского, то я мог бы предположить, что это вопрос культуры, так что вы можете попробовать настройки RegexOptions в CultureInvariant:

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

Я использую следующий код для RegEx корейски:

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(); 
} 
Смежные вопросы