0

我有一个富文本框,我在其中使用空格键触发按键事件。查找我已实现的最后一个书面单词的所有出现次数的逻辑是:

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");
            }

        }
    }

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

4

2 回答 2

1

正则表达式不起作用像这样:

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;
于 2013-09-18T14:55:46.533 回答
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);
于 2013-09-18T15:00:32.667 回答