我需要由线被分开线执行以下操作:正则表达式分开单词
实施例:
word "multiple set" another word L&D "another set"
输出:
word
multiple set
another
word
L&D
another set
我目前使用
:
(?<match>\w+)|\""(?<match>[\w\s]*)
但它不适用于安培rsand(&)
谢谢!
我需要由线被分开线执行以下操作:正则表达式分开单词
实施例:
word "multiple set" another word L&D "another set"
输出:
word
multiple set
another
word
L&D
another set
我目前使用
:
(?<match>\w+)|\""(?<match>[\w\s]*)
但它不适用于安培rsand(&)
谢谢!
尝试:"(.*?)"|(\S+)
这将懒洋洋地在引号OR
任何一套非whitepace字符之间的匹配任何字符。
示例here。根据不同的语言,您可能需要避开双引号(\"(.*?)\"
)。
像@abiessu提到的那样,您可以使用更具体的([^"]*)
选择器替换懒惰选择器(.*?)
。延迟选择器将选择所有内容,直到选择器之后的第一个字符(以下"
),其中更具体的([^"]*)
将选择除"
之外的所有内容。不确定延迟选择器与字符类型之间是否存在性能差异,但是它取决于您。
如果您传递给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"
using C#a那么现在 –
......那么你为什么不使用'\ S'而不是单词字符呢?我不知道为什么你会期望“字符”匹配&符号... – Doorknob
你试过逃避&符号吗? –