0

我有这样一句话:

"Hey  what is up

注意后面的两个空格Hey

我正在使用以下正则表达式将此句子拆分为字符串数组:

string[] tokensArr = Regex.Split(data, "( )");

现在,对我来说,将每个空格也作为单独的字符串也很重要。但发生的情况是,如果我在行中插入多个空格,则拆分返回 3 个空格字符串而不是 2(行中有 3 个空格,它返回 5,等等)。调试器中额外的一个看起来像这样"",而不是" ". 为什么要插入?我怎样才能摆脱它只剩下我实际插入的空格?

再次说明:我的意图不是过滤双/三空格。但是为了摆脱分割它们时得到的额外空间。试试吧:

键入一些在 2 个单词之间有双空格的文本。通过上面的方法运行它,你会看到拆分返回而不是 2 项空格 3。

4

2 回答 2

2

说,你有逗号而不是空格

Hey,,what,is,up

这看起来像带有字段的 CSV 输入

"Hey"
""
"what"
"is"
"up"

不是吗?因此,如果您在 上拆分,,您会期望得到一个空字符串。如果您拆分(,), 以捕获分隔符,您仍然希望它在那里。如果您使用空格执行此操作,则同样适用。

所以你唯一的选择是最后检查你的数组,并删除空字符串,我猜。

string[] tokensArr = Regex.Split(data, "( )").Where(s => s != String.Empty).ToArray();

这会给你

"Hey", " ", " ", "what", " ", "is", " ", "up"

相反,如果您只想拥有一个包含两个空格的字符串,则不要拆分为单个空格,而是拆分一个或多个空格:

string[] tokensArr = Regex.Split(data, "([ ]+)")

方括号是可选的,但有助于提高可读性。这会给你

"Hey", "  ", "what", " ", "is", " ", "up"
于 2013-06-14T13:55:15.777 回答
1

如果您想知道为什么当您有 2 个空格时要添加额外的项目,请考虑一下它试图做什么。它需要每个空格之间的每个字符串。如果你有 2 个空格,那么它们之间的字符串是空的,但它肯定仍然是一个有效的字符串。

另一种思考方式是,如果你在一个字母上拆分一个单词,比如'a',那么从拆分返回的任何值中都不会有任何'a'。如果按空格拆分,则返回的值中将没有空格。

于 2013-06-14T13:56:26.523 回答