c#regex拆分忽略像“=”“ - ”这样的字符

时间:2017-02-09 21:13:52

标签: c# regex split

我的代码是

string sentence = ".a -w =e ?a";
string[] words = Regex.Split(sentence, @"(?![-\/.:~+=!>?])\W+");
foreach (string word in words)
{
    Console.WriteLine(word);
}

输出.a w e a,但我希望它输出.a -w =e ?a

我对编码有点无能为力,所以任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:0)

如下修改代码将返回所需的结果。 Split()方法将根据输入拆分字符串并返回一个数组。对于更复杂的拆分要求,正则表达式拆分会更好。

string sentence = ".a -w =e ?a";
string[] words = sentence.Split(' ');
foreach (string word in words)
{
   Console.WriteLine(word);
}

答案 1 :(得分:0)

假设你想要输出:a,w,e,a:

string sentence = ".a -w =e ?a";
string[] words = Regex.Split(sentence, @"[\W_]+"); 
foreach (string word in words)
{
    Console.WriteLine(word);
}

这会分裂任何不是字母或数字的东西。

<强>解释

  • \W =不是字母,数字或下划线(请参阅http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1
  • _ =因为我们只需要字母或数字,所以还要将下划线作为要分割的字符
  • [ ... ] - 这表示要分为\W_;而不是\W紧跟_
  • + - 这表示如果有多个拆分字符,则将它们视为1;即a - b会产生ab而不是a ,,, b

答案 2 :(得分:0)

您不需要使用Split,但可以简单地匹配任何不是空格的内容。

Regex.Matches(".a -w =e ?a", @"[^\s]+")
     .OfType<Match>()
     .Select(mt => mt.Value)

将返回一个单词数组

enter image description here

[^\s]+表示匹配此集[...]中的任何内容, ^空格\s+这些字符中的一个或多个(不是空格的字符)。

请注意,差不多十年前我写了一篇博客文章,关于在多行使用正则表达式分裂并遇到问题的陷阱。

Regex Split Pitfalls Over Multiple Lines