Поиск многобайтовых строк с использованием RegEx - PullRequest
1 голос
/ 10 ноября 2009

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

Сценарий, в котором работает приведенный ниже код, -

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

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

не попадает внутрь цикла for-each

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

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

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

string strTemp = myRange.text;
string strExp =@">(([^<])*?)" + 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;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2014

Я использую следующий код 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();
}
0 голосов
/ 17 ноября 2010

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

Regex reg = new Regex(strExp, RegexOptions.CultureInvariant);
Regex reg1 = new Regex(strTemp, RegexOptions.CultureInvariant);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...