我有这样一句话:
"Hey what is up
请注意Hey
之后的两个空格。
我使用以下正则表达式将此句子拆分为字符串数组:
string[] tokensArr = Regex.Split(data, "( )");
现在,对我来说重要的是将每个空格也作为一个单独的字符串。但是,如果我在行中插入多个空格,则拆分返回3个空格字符串而不是2个(行中有3个空格,它返回5,等等)。调试器中的额外一个看起来像""
而不是" "
。为什么要插入?我怎样才能摆脱它只剩下我实际插入的空间?
再说清楚: 我的意图不是过滤双倍/三倍空间。但是为了摆脱分裂它们时得到的额外空间。只是试一试:
在两个单词之间键入一些双倍空格的文本。通过上面的方法运行它,你会看到拆分返回而不是2个空格项目。
答案 0 :(得分: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"
答案 1 :(得分:1)
如果您想知道为什么在有2个空格时添加其他项目,请考虑它正在尝试做什么。每个空格之间需要每个字符串。如果你有2个空格,那么它们之间的字符串是空的,但它肯定仍然是一个有效的字符串。
另一种思考方式是,如果你在一个字母上分词,说'a',那么从分词返回的任何值中都不会有'a'。如果拆分空格,则返回的值中不会有空格。