我的代码是
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
我对编码有点无能为力,所以任何帮助都会非常感激。
答案 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
会产生a
,b
而不是a
,,, b
。答案 2 :(得分:0)
您不需要使用Split
,但可以简单地匹配任何不是空格的内容。
Regex.Matches(".a -w =e ?a", @"[^\s]+")
.OfType<Match>()
.Select(mt => mt.Value)
将返回一个单词数组
[^\s]+
表示匹配此集[...]
中的任何内容,不 ^
空格\s
。 +
这些字符中的一个或多个(不是空格的字符)。
请注意,差不多十年前我写了一篇博客文章,关于在多行使用正则表达式分裂并遇到问题的陷阱。