正则表达式忽略字符串中的连续引号

时间:2014-06-13 02:14:13

标签: c# regex sprache

我在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

4 个答案:

答案 0 :(得分:2)

如果我正确理解你,那就是你正在寻找的那种正则表达式:

"(?:""|[^"])*"

请参阅demo。  1. "匹配开头报价  2. (?:""|[^"])*匹配两个引号或任何非引号(包括换行符)的字符,重复  3. "匹配收盘价。

但它总是归结为你的输入是否平衡。如果没有,你会得到误报。如果你有一个字符串,如"string"", which should be matched?“字符串”“,”“`,或什么都没有?...这是一个艰难的决定,幸运的是,你不必做出如果你确定你的意见。

答案 1 :(得分:1)

您可以根据此模式调整所需的输出:

"(.+".+")"|(".+?")|("")

示例:

http://regex101.com/r/lO1vZ4

答案 2 :(得分:0)

如果您只想忽略连续的双引号,请尝试:

("{2,})

<强> Live demo

答案 3 :(得分:0)

此正则表达式"("+)可能会帮助您匹配额外的不需要的双引号。

这是DEMO