0

编辑:为了消除混乱,即使使用“更好看”的替换功能,这仍然没有解决。

所以,长话短说,我正在从文件输入创建正则表达式,唯一的事情是,当需要正则表达式时,文件输入将如下所示:

look*

在 C# 的正则表达式中,这意味着:

look[a-zA-Z]*

因此,我尝试使用以下代码来做到这一点:

static void HighlightPhrase(RichTextBox box, string phrase, Color color)
    {
        int pos = box.SelectionStart;
        MatchCollection myM;
        string s = box.Text;
        MessageBox.Show(phrase, "PHRASE");
        if (phrase.Contains("*"))
        {
            phrase = phrase.Replace(phrase = phrase.Replace("*", "[a-zA-Z]*");
            MessageBox.Show(phrase);
            myM = Regex.Matches(s, phrase);
            foreach (Match m in myM)
            {
                MessageBox.Show("I reach here!");
                box.SelectionStart = m.Index;
                box.SelectionLength = m.Length;
                box.SelectionColor = color;
            }
            box.SelectionStart = pos;
            box.SelectionLength = 0;
        }

忽略 MessageBoxes,它们是出于调试目的,但不幸的是,从未见过“我到达这里”框。我的整个目标是实际实现成功匹配以启动该 foreach 循环。

4

2 回答 2

2

顺便说一句:您应该包含一些不适合您的示例输入。如果没有样本输入,这只是一个猜测。

您可能需要为 Matches 调用指定一些RegexOptions;我的钱是你想要一个不区分大小写的搜索。

myM = Regex.Matches(s, phrase, RegexOptions.IgnoreCase);
于 2013-06-14T18:19:16.723 回答
2

看不到这个简单的替换需要正则表达式。改用这个

phrase = phrase.Replace("*", "[a-zA-Z]*");
于 2013-06-14T18:08:07.670 回答