解析表达式语法中的Escaped字符串

时间:2013-06-03 20:37:24

标签: python string parsing peg parsimonious

我正在尝试使用python库parsimonious为一个小语言实用程序编写语法,但我正在努力编写一个包含字符串的部分,特别是带有转义引号和其他特殊字符的字符串。

我有以下内容:

string         = doubleString / singleString
doubleString   = "\"" escapedString "\""
singleString   = "'" escapedString "'"

escapedString好像尚未定义,但应该接受任何人会合理地期望编程语言中的字符串接受的内容。我想不出从哪里开始。有没有人有任何建议?

2 个答案:

答案 0 :(得分:2)

我不知道简约的语法,但在正则表达式的语法中,我会做类似的事情:

string         = doubleString / singleString
doubleString   = ~'"([^"]|(\"))*"'
singleString   = ~"'([^']|(\'))*'"

即。你需要为每种类型的字符串使用不同的转义字符串,每个字符串都由一个可能为空的序列组成,这些字符不是最终引用字符或转义结束引号字符。

答案 1 :(得分:-1)

你可能想在这里做两件事。第一个是在字符串之前添加前缀r。您可能想要做的另一件事是使用三引号,即"""。使用前缀将使得字符串中的转义序列“根据与标准C使用的规则类似的规则进行解释”。第二个是处理任何额外的引号/撇号,否则会使你的字符串提前退出。

考虑以下示例:

string = r"""this %is m%y crazy s"\tri""'""ng\s\n%\d\\r''\'"""
print string

如果您正在喂食的字符串中也有三重引号,则此功能可能无效;我不确定如何解决这个问题。