2014-01-07 2 views
2

내가 파이썬의 사람들에게 비슷한 방식으로 계속 할 수있는 여러 문자열과 일치하는 대한 파싱을 사용하려고 해요 인용 이것을 인식하십시오. 여기에 지금까지 시도한 것입니다 :파이썬/대한 파싱 여러 줄은

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) 

답변

4

문제는 여러 줄 인용 문자열을 가진 것은 당신이 생각하는 일을하지 않는다는 것입니다. 여러 줄 인용 된 문자열은 문자 그대로입니다 - 내 줄 바꿈이있는 문자열 :

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'] 될 것입니다.

파이썬의 문자열이 어떻게 행동하는지에 비슷한 문자열을 원하는 경우 내가 아는 한, 당신은 그것을 자신을 정의 :

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 클래스는 다양한 인용 문자열을 단일 단위로 병합하므로 출력 목록에 단일 문자열로 나타납니다. 백 슬래시가 출력 문자열의 일부로 결합되지 않도록 억제 된 이유입니다.

+0

감사합니다. 이것은 내가 바라는 바를 수행합니다! –