Проблема заключается в том, что наличие нескольких строк в кавычках строки не делать то, что вы думаете. Многострочный строка в кавычках буквально что - строка с символами новой строки внутри:
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
объединяет различные строки с кавычками в один блок, чтобы они отображались как одна строка в выходном списке. Причина, по которой обратная косая черта подавляется так, что она не объединяется как часть выходной строки.
Спасибо, это делает то, на что я надеялся! –