正则表达式分裂单词

时间:2014-01-13 22:20:10

标签: c# regex

我需要逐行拆分以下内容:

示例:

word "multiple set" another word L&D "another set"

输出:

word
multiple set
another
word
L&D
another set

我目前正在使用:

(?<match>\w+)|\""(?<match>[\w\s]*)

但它不适用于&符号(&amp;)

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试:"(.*?)"|(\S+)

这将懒惰地匹配引号OR之间的任何字符以及任何非空白字符集。

示例here。根据您可能需要的语言来避免双引号(\"(.*?)\")。

与@abiessu提及的一样,您可以使用更具体的(.*?)选择器替换延迟选择器([^"]*)。延迟选择器将选择所有内容,直到选择器后面的第一个字符(以下"),其中更具体的([^"]*)将从"中选择所有内容。不确定延迟选择器与字符类是否存在性能差异,但它取决于您。

答案 1 :(得分:0)

如果传递给Regex.Split的模式包含捕获组,则捕获的文本将包含在结果集中。例如:

var input = "word \"multiple set\" another word L&D \"another set\"";
var output = Regex.Split(input, "\"([^\"]*)\"|\\s");

生成如下结果集:

"word"
""
"multiple set"
""
"another"
"word"
"L&D"
""
"another set" 
""

现在,如果您只删除空元素(这里有一点Linq可用):

var output = Regex.Split(input, "\"([^\"]*)\"|\\s").Where(x => x.Length > 0);

生成如下结果集:

"word"
"multiple set"
"another"
"word" 
"L&D"
"another set"