【发布时间】:2016-04-15 22:03:24
【问题描述】:
我正在使用以下正则表达式进行标记:
reg = new Regex("([ \\t{}%$^&*():;_–`,\\-\\d!\"?\n])");
正则表达式应该稍后过滤掉所有内容,但是我遇到问题的输入字符串格式如下:
; "string1"; "string2"; "string...n";
字符串的结果:; "social life"; "city life"; "real life" 我知道应该如下所示:
; White " social White life " ; White " city White life " ; White " real White life "
但是有一个问题,我得到以下形式的输出
; empty White empty " social White life " empty ; empty White empty " city White life " empty ; empty White empty " real White life " empty
White:表示空白, empty:表示拆分数组中的空条目。
我的拆分代码如下:
string[] ret = reg.Split(input);
for (int i = 0; i < ret.Length; i++)
{
if (ret[i] == "")
Response.Write("empty<br>");
else
if (ret[i] == " ")
Response.Write("White<br>");
else
Response.Write(ret[i] + "<br>");
}
为什么我得到这些空条目?尤其是当有; 后跟空格后跟" 时,结果如下所示:
; empty White empty "
我能解释一下为什么该命令会添加空条目吗?以及如何在没有任何额外 O(n) 复杂性或使用另一个数据结构作为 ret
【问题讨论】:
-
为了简化这一点,您是否只是想获取引号之间的句子(然后拆分单个单词)?
-
我需要对所有内容进行标记,然后我将删除除 " 和 ; 之外的所有符号
-
Regex.Split()在下列情况下总是会添加一个空元素: - 如果在输入字符串的开头或结尾找到匹配项,则在开头包含一个空字符串或返回数组的末尾。 - 如果多个匹配项彼此相邻,则将一个空字符串插入到数组中。例如,将字符串拆分为单个连字符会导致返回的数组在找到两个相邻连字符的位置包含一个空字符串,如以下代码所示。 -
我不明白匹配空字符串的标准是什么。 拆分数组中的空条目是什么意思?