我的问题非常复杂,但可以归结为一个简单的例子。
我正在编写一个自定义查询语言,用户可以输入字符串,我解析成 LinQ 表达式。
我想要实现的是按 *
字符拆分字符串,除非它被正确转义。
Input Output Query Description
"*\\*" --> { "*", "\\", "*" } -- contains a '\'
"*\\\**" --> { "*", "\\\*", "*" } -- contains '\*'
"*\**" --> { "*", "\*", "*" } -- contains '*' (works now)
我不介意Regex.Split
返回空字符串,但最终结果却是这样的:
Regex.Split(@"*\\*", @"(?<!\\)(\*)") --> {"", "*", "\\*"}
你可以看到,我已经尝试使用负回顾后发断言,在所有情况下都有效,除了这种情况。我还尝试过Regex.Escape
,但没有成功。
显然,我的问题是我正在寻找\*
,而\\*
匹配它。但在这种情况下,\\
是另一个转义序列。
任何解决方案不一定需要涉及正则表达式。
(\*)(\\\\)(\*)
的模式匹配来得到三个匹配组。在您的实际情况下,这是否是使用拆分的可接受替代方法? - Chris*
字符来分割字符串,难道你的第二个示例不应该是这样的吗?"*\\\**" --> { "*", "\\\*", "*" }
- groverboy