我在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;
然而,我使用&#34;双倍&#34;使用&#34;双倍&#34;使用转义引号的格式。引号,例如:
a = "a ""string"".";
尝试解析时,不会返回任何内容。它应该返回:
a ""string"".
此外
a = "";
应解析为string.Empty
或类似的。
我根据像"(?:[^;])*"
这样的答案执行了正则表达式,但{:1}}或<:p>
public static readonly Parser<string> QuotedText =
from content in Parse.Regex("""(?:[^;])*""").Token()
这不起作用(即在上述情况下不返回任何匹配)。我认为我的初学者正则表达式技能正在阻碍。有人有任何提示吗?
编辑:我在这里测试 - this
答案 0 :(得分:2)
如果我正确理解你,那就是你正在寻找的那种正则表达式:
"(?:""|[^"])*"
请参阅demo。
1. "
匹配开头报价
2. (?:""|[^"])*
匹配两个引号或任何非引号(包括换行符)的字符,重复
3. "
匹配收盘价。
但它总是归结为你的输入是否平衡。如果没有,你会得到误报。如果你有一个字符串,如"string"", which should be matched?
“字符串”“,
”“`,或什么都没有?...这是一个艰难的决定,幸运的是,你不必做出如果你确定你的意见。
答案 1 :(得分:1)
答案 2 :(得分:0)
答案 3 :(得分:0)
此正则表达式"("+)
可能会帮助您匹配额外的不需要的双引号。
这是DEMO