代码之家  ›  专栏  ›  技术社区  ›  Margus

使用regex在C中查找文本中的单词#

  •  2
  • Margus  · 技术社区  · 16 年前

    我想在文本中查找单词,其中单词只包含预选的字符集。

    例如:我使用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 回复  |  直到 16 年前
        1
  •  6
  •   Joey Gumbo    16 年前

    Regex.Split(String, String) 而不是字符串。拆分(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
    

    (尽管后者在开头仍然包含一个空项。。。好吧,那就交给你了。)

        2
  •  1
  •   Richard J. Ross III    16 年前

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

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