Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有特殊要求的分裂管柱_C#_.net_Regex_String_Split - Fatal编程技术网

C# 有特殊要求的分裂管柱

C# 有特殊要求的分裂管柱,c#,.net,regex,string,split,C#,.net,Regex,String,Split,假设我有绳子 string Song = "The-Sun - Is Red"; 我需要将它与“-”字符分开,但前提是前后的字符都是空格 我不希望它在“太阳”的短跑中分裂,而是在“太阳是”的短跑中分裂 我用来拆分的代码是 string[] SongTokens = Song.Split('-'); 但我相信,这一点一开始就明显存在分歧。我只需要在'-'前后有空格的情况下拆分 谢谢 我需要将它与“-”字符分开,但前提是前后的字符都是空格 您可以使用以下非正则表达式解决方案: string[]

假设我有绳子

string Song = "The-Sun - Is Red";
我需要将它与“-”字符分开,但前提是前后的字符都是空格

我不希望它在“太阳”的短跑中分裂,而是在“太阳是”的短跑中分裂

我用来拆分的代码是

string[] SongTokens = Song.Split('-');
但我相信,这一点一开始就明显存在分歧。我只需要在'-'前后有空格的情况下拆分

谢谢

我需要将它与“-”字符分开,但前提是前后的字符都是空格

您可以使用以下非正则表达式解决方案:

string[] SongTokens = Song.Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries);
string[] SongTokens = Regex.Split(Song, @"\p{Zs}+-\p{Zs}+")
            .Where(x => !String.IsNullOrWhiteSpace(x))
            .ToArray();
结果:

请参阅有关MSDN的更多详细信息。第一个参数是分隔符,它表示分隔此字符串中的子字符串的字符串数组、不包含分隔符的空数组或
null

StringSplitOptions.RemoveEmptyEntries
从结果数组中删除所有空元素。您可以使用
StringSplitOptions.None
保留空元素

然而,如果两端都有硬空间或规则空间,则可能会出现问题。然后,您宁愿选择这样的正则表达式解决方案:

string[] SongTokens = Song.Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries);
string[] SongTokens = Regex.Split(Song, @"\p{Zs}+-\p{Zs}+")
            .Where(x => !String.IsNullOrWhiteSpace(x))
            .ToArray();

\p{Zs}+
模式匹配任何Unicode“水平”空格,出现1次或更多次。

谢谢!我会把你作为答案,但是你上面的用户详细介绍了,但是你的代码也很完美!
string[] SongTokens = Song.Split(new string[] {" - "}, StringSplitOptions.None);