使用正则表达式在C#中查找文本内的单词

时间:2010-09-13 17:00:28

标签: c# regex

我想在文本中找到单词,其中单词仅包含预选字符集。

例如:我使用正则表达式来分割不在集合中的字符并删除空白的条目

像:

string inp = @"~T!@#e$мудак%š^t<>is69&.,;((טעראָר))_+}{{男子}[죽은]ที่เดิน:?/Ök\|`'+*-¤=";
string reg[] = {"[^A-Za-zšžõäöüŠŽÕÄÖÜ]"};

foreach (string word in inp.Split(reg, StringSplitOptions.RemoveEmptyEntries))
    Console.Write(word + " ");

我想要获得的输出是:

 T e š t is Ök

2 个答案:

答案 0 :(得分:6)

你想要Regex.Split(String, String)而不是String.Split(String [],StringSplitOptions) - 后者没有正则表达式匹配。

有点像以下(测试过):

string inp = @"~T!@#e$мудак%š^t<>is69&.,;((טעראָר))_+}{{男子}[죽은]ที่เดิน:?/Ök\|`'+*-¤="; 
string reg = "[^A-Za-zšžõäöüŠŽÕÄÖÜ]";

foreach (string word in Regex.Split(inp, reg))  
    if (word != string.Empty)
        Console.Write(word + " ");

PowerShell测试:

PS> $inp = '~T!@#e$мудак%š^t<>is69&.,;((טעראָר))_+}{{男子}[죽은]ที่เดิน:?/Ök\|`''+*-¤='
PS> $inp -split '[^A-Za-zšžõäöüŠŽÕÄÖÜ]' -join ' '
 T   e š t  is                                      Ök

显然你需要过滤掉空字符串,所以

PS> $inp -split '[^A-Za-zšžõäöüŠŽÕÄÖÜ]' -ne '' -join ' '
T e š t is Ök

PS> $inp -split '[^A-Za-zšžõäöüŠŽÕÄÖÜ]+' -join ' '
 T e š t is Ök

(虽然后者在开始时仍然包含一个空项目......啊,我会把它留给你。)

答案 1 :(得分:1)

这就是你想要的(测试过的):

string inp = @"~T!@#e$мудак%š^t<>is69&.,;((טעראָר))_+}{{男子}[죽은]ที่เดิน:?/Ök\|`'+*-¤=";
Regex reg = new Regex("[^A-Za-zšžõäöüŠŽÕÄÖÜ]");

foreach (string s in reg.Split(inp))
{
      if (String.IsNullOrEmpty(s))
           continue;

      Console.Write(s + " ");
}