我需要逐行拆分以下内容:
示例:
word "multiple set" another word L&D "another set"
输出:
word
multiple set
another
word
L&D
another set
我目前正在使用:
(?<match>\w+)|\""(?<match>[\w\s]*)
但它不适用于&符号(&amp;)
谢谢!
答案 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"