我正在尝试使用python库parsimonious为一个小语言实用程序编写语法,但我正在努力编写一个包含字符串的部分,特别是带有转义引号和其他特殊字符的字符串。
我有以下内容:
string = doubleString / singleString
doubleString = "\"" escapedString "\""
singleString = "'" escapedString "'"
escapedString
好像尚未定义,但应该接受任何人会合理地期望编程语言中的字符串接受的内容。我想不出从哪里开始。有没有人有任何建议?
答案 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
如果您正在喂食的字符串中也有三重引号,则此功能可能无效;我不确定如何解决这个问题。