gpt4 book ai didi

Python/Pyparsing - 多行引号

转载 作者:行者123 更新时间:2023-11-28 21:56:42 24 4
gpt4 key购买 nike

我正在尝试使用 pyparsing 来匹配可以以与 python 类似的方式继续的多行字符串:

Test = "This is a long " \
"string"

我找不到让 pyparsing 识别这一点的方法。到目前为止,这是我尝试过的:

import pyparsing as pp

src1 = '''
Test("This is a long string")
'''

src2 = '''
Test("This is a long " \
"string")
'''

_lp = pp.Suppress('(')
_rp = pp.Suppress(')')
_str = pp.QuotedString('"', multiline=True, unquoteResults=False)
func = pp.Word(pp.alphas)

function = func + _lp + _str + _rp
print src1
print function.parseString(src1)
print '-------------------------'
print src2
print function.parseString(src2)

最佳答案

问题是多行引用的字符串并不像您想象的那样。多行带引号的字符串字面意思是 -- 内部有换行符的字符串:

import pyparsing as pp

src0 = '''
"Hello
World
Goodbye and go"
'''

pat = pp.QuotedString('"', multiline=True)
print pat.parseString(src0)

解析此字符串的输出将是 ['Hello\n World\n Goodbye and go']

据我所知,如果你想要一个类似于 Python 字符串行为方式的字符串,你必须自己定义它:

import pyparsing as pp

src1 = '''
Test("This is a long string")
'''

src2 = '''
Test("This is a long"
"string")
'''

src3 = '''

Test("This is a long" \\
"string")
'''

_lp = pp.Suppress('(')
_rp = pp.Suppress(')')
_str = pp.QuotedString('"')
_slash = pp.Suppress(pp.Optional("\\"))
_multiline_str = pp.Combine(pp.OneOrMore(_str + _slash), adjacent=False)

func = pp.Word(pp.alphas)

function = func + _lp + _multiline_str + _rp

print src1
print function.parseString(src1)
print '-------------------------'
print src2
print function.parseString(src2)
print '-------------------------'
print src3
print function.parseString(src3)

这会产生以下输出:

Test("This is a long string")

['Test', 'This is a long string']
-------------------------

Test("This is a long"
"string")

['Test', 'This is a longstring']
-------------------------

Test("This is a long" \
"string")

['Test', 'This is a longstring']

注意:Combine 类将各种带引号的字符串合并为一个单元,以便它们在输出列表中显示为单个字符串。反斜杠被抑制以使其不组合为输出字符串的一部分的原因。

关于Python/Pyparsing - 多行引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com