用reg表达式字符串化空格

时间:2013-06-14 13:49:56

标签: c# regex string

我有这样一句话:

"Hey  what is up

请注意Hey之后的两个空格。

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

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

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

再说清楚: 我的意图不是过滤双倍/三倍空间。但是为了摆脱分裂它们时得到的额外空间。只是试一试:

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

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'。如果拆分空格,则返回的值中不会有空格。