繁体   English   中英

使用RegEx搜索多字节字符串

[英]Search MultiByte Strings using RegEx

我正在使用WebBrowser控件处理html文档,我需要制作一个实用程序来搜索单词并在浏览器中突出显示它。 如果字符串是英语,则效果很好,但是对于其他语言(例如韩语)的字符串,它似乎不起作用。

以下提到的代码适用的场景是-

考虑到用户在网页中选择了一个单词“ Example”,现在我需要突出显示该单词及其所有出现的地方。 另外,我还需要计算它们的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;
        }
    }
}

我将以下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();
}

如果该代码适用于英语单词,但不针对韩语返回任何结果,那么我可能建议这是一个文化问题,因此您可以尝试将RegexOptions设置为CultureInvariant:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM