我如何解析/获取只有字母的textBox单词?

时间:2013-07-03 12:56:13

标签: c# winforms

这是我在form1按钮事件中的代码:

StringBuilder sb = new StringBuilder();
var words = Regex.Split(textBox1.Text, @"(?=(?<=[^\s])\s+)");
foreach (string word in words)
{
    ScrambleTextBoxText scrmbltb = new ScrambleTextBoxText(word.Trim());
    scrmbltb.GetText();
    sb.Append(word.Replace(word.Trim(), scrmbltb.scrambledWord));
}
textBox2.AppendText(sb.ToString());

我从textBox1获取了我想要的所有单词,但有些单词也是----?/\n\r < / p>

我想解析/只获取用字母构建的单词。

如何过滤它?

我试着这样做:

StringBuilder sb = new StringBuilder();
            var words = Regex.Split(textBox1.Text, @"(?=(?<=[^\s])\s+\\w+)".Cast<Match>().Select(match => match.Value));
            var matches = Regex.Matches(textBox1.Text, "\\w+").Cast<Match>().Select(match => match.Value);
            foreach (string word in words)
            {
                ScrambleTextBoxText scrmbltb = new ScrambleTextBoxText(word.Trim());
                scrmbltb.GetText();
                sb.Append(word.Replace(word.Trim(), scrmbltb.scrambledWord));
            }
            textBox2.AppendText(sb.ToString());

我需要var字,因为Regex.Split对我很有用,可以复制textBox1和textBox2之间的空格。 所以我试着添加“\ w +”和.Cast()。选择(match =&gt; match.Value 因此,它将在变量词中进行修改,但我现在在var字上出错:

错误1'System.Text.RegularExpressions.Regex.Split(string,int)'的最佳重载方法匹配有一些无效的参数

错误2参数2:无法从'System.Collections.Generic.IEnumerable'转换为'int'

我该如何解决?

我现在尝试了这个,但它没有用:

var words = Regex.Matches(textBox1.Text, @"(?=(?<=[^\s])\s+\\w+)").Cast<Match>().Select(match => match.Value);

我现在一言不发。

2 个答案:

答案 0 :(得分:1)

试试这个:

var matches = Regex.Matches(textBox1.Text, "\\w+").Cast<Match>().Select(match => match.Value);

应该给你所有没有空字符串的单词。

整个代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {

      var matches = Regex.Matches("Line 1 this is any random text. \r\n Line 2 Another Line?! \r\n Line 3 End of text. ", "\\w+").Cast<Match>().Select(match => match.Value);
      foreach (string sWord in matches)
      {
        Console.WriteLine(sWord);
      }

    }
  }
}

答案 1 :(得分:0)

如果您想要使用正则表达式,并且特别只想要字母,则可以执行此操作(匹配而不是拆分):

var words = Regex.Matches(Test, @"[a-zA-Z]+");"

您可能需要"[\w]+",因为我怀疑您会遇到一些字符/数字。