我正在尝试制作一个正则表达式字符串,该字符串将字符串的单行分割为 命令行参数样式。其中:
\s+
)未被"
引用
2-a。忽略转义的"
(忽略\"
)
根据regexr.com和regex101.com(链接到测试代码),在我创建此字符串的地方,据我了解,这没有问题。
给出代码:
Regex.Split("lorem \"ipsum door?!\" sit?! amet!!!", @"(?<=^(\\""|[^""])*((?<!\\)""(\\""|[^""])*((?<!\\)""))*(\\""|[^""])*)\s+")
//(?<=^(\\"|[^"])*((?<!\\)"(\\"|[^"])*((?<!\\)"))*(\\"|[^"])*)\s+
预期:
lorem
"ipsum door?!"
sit?!
amet!!!
返回:
lorem
l
"ipsum door?!"
l
"ipsum door?!"
i
"
sit?!
l
"ipsum door?!"
i
"
amet!!!
更多信息:在添加条件2-a(忽略\"
)之前,我想到了这个问题,并且遇到了类似的问题。代码/结果:https://pastebin.com/76eKp1wb
答案 0 :(得分:0)
我可以通过选项RegexOptions.ExplicitCapture获得想要的结果
像这样:
Regex splitter = new Regex(@"(?<=^(\\""|[^""])*((?<!\\)""(\\""|[^""])*((?<!\\)""))*(\\""|[^""])*)\s+", RegexOptions.ExplicitCapture);
var lineBreak = splitter.Split("lorem \\\"ipsum \\\" door?!\" sit?! \" amet!!!");
显然,当捕获不带或带有任何选项时,两者没有什么区别。换句话说,只有拆分时才有问题。
我最好的猜测是库试图在捕获组中捕获某些东西,然后尝试在其中进行分割。