我在 Sprache 和 C# 中为使用我无法控制的格式的文件构建了一个解析器。使用它我可以正确转换:
a = "my string";
进入
my string
解析器(仅用于引用的文本)当前如下所示:
public static readonly Parser<string> QuotedText =
from open in Parse.Char('"').Token()
from content in Parse.CharExcept('"').Many().Text().Token()
from close in Parse.Char('"').Token()
select content;
但是,我正在使用的格式使用“双双”引号转义引号,例如:
a = "a ""string"".";
尝试解析此内容时,不会返回任何内容。它应该返回:
a ""string"".
此外
a = "";
应该被解析成一个string.Empty
或类似的。
我已经尝试过基于这样的答案的正则表达式不成功,例如,"(?:[^;])*"
或者:
public static readonly Parser<string> QuotedText =
from content in Parse.Regex("""(?:[^;])*""").Token()
这不起作用(即在上述情况下不返回匹配项)。我认为我的初学者正则表达式技能正在妨碍我。有人有任何提示吗?
编辑:我在这里测试它 - http://regex101.com/r/eJ9aH1