Моя проблема довольно сложная, но ее можно свести к простому примеру.
Я пишу пользовательский язык запросов, где пользователи могут вводить строки, которые я разбираю с выражениями LinQ.
То, что я хотел бы сделать, это разделить строки символом *
, если только он не экранирован правильно.
Input Output Query Description
"*\\*" --> { "*", "\\", "*" } -- contains a '\'
"*\\\**" --> { "*", "\\\*", "*" } -- contains '\*'
"*\**" --> { "*", "\*", "*" } -- contains '*' (works now)
Я не возражаю Regex.Split
возвращать пустые строки, но в итоге получаю следующее:
Regex.Split(@"*\\*", @"(?<!\\)(\*)") --> {"", "*", "\\*"}
Как вы можете видеть, я попытался с отрицательным lookbehind, который работает для всех моих случаев, кроме этого. Я также пробовал Regex.Escape
, но не повезло.
Очевидно, моя проблема в том, что я ищу \*
, который соответствует \\*
. Но в этом случае,
\\
- другая escape-последовательность.
В любом решении нет необходимости включать регулярное выражение.