我有一个富文本框,我用空格键触发了按键事件。找到我已实现的最后一个写入字的所有出现次数的逻辑是:
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");
}
}
}
但它不起作用。有人可以指出错误或纠正它吗?
答案 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);