如何在富文本框中查找最后写入的Word / String的所有出现次数?

时间:2013-09-18 14:40:54

标签: c# .net string split richtextbox

我有一个富文本框,我用空格键触发了按键事件。找到我已实现的最后一个写入字的所有出现次数的逻辑是:

private void textContainer_rtb_KeyPress_1(object sender, KeyPressEventArgs e)
    {
        //String lastWordToFind;
        if (e.KeyChar == ' ')
        {
            int i = textContainer_rtb.Text.TrimEnd().LastIndexOf(' ');
            if (i != -1)
            {
                String lastWordToFind = textContainer_rtb.Text.Substring(i + 1).TrimEnd();

                int count = new Regex(lastWordToFind).Matches(this.textContainer_rtb.Text.Split(' ').ToString()).Count;
                MessageBox.Show("Word: " + lastWordToFind + "has come: " + count + "times");
            }

        }
    }

但它不起作用。有人可以指出错误或纠正它吗?

2 个答案:

答案 0 :(得分:1)

正则表达式不起作用lilke this:

int count = new Regex(lastWordToFind).Matches(this.textContainer_rtb.Text.Split(' ').ToString()).Count;

这一部分:

this.textContainer_rtb.Text.Split(' ').ToString()

会将文本拆分为字符串数组:

string s = "sss sss sss aaa sss";
string [] arr = s.Split(' '); 
拆分后

arr 是这样的:

arr[0]=="sss"
arr[1]=="sss"
arr[2]=="sss"
arr[3]=="aaa"
arr[4]=="sss"

然后 ToString()返回类型名称:

System.String[]

所以你真正做的是:

int count = new Regex("ccc").Matches("System.String[]").Count;

这就是为什么它不起作用。你应该这样做:

 int count = new Regex(lastWordToFind).Matches(this.textContainer_rtb.Text).Count;

答案 1 :(得分:0)

你的正则表达式似乎不正确。请尝试以下方法。

String lastWordToFind = textContainer_rtb.Text.Substring(i + 1).TrimEnd();
// Match only whole words not partial matches
// Remove if partial matches are okay
lastWordToFind = @"\b" + word + @"\b";

Console.WriteLine(Regex.Matches(richTextBox1.Text, word).Count);