파싱 된 목록을 추출하여 원본 문자열을 반환 할 수 있습니까?pyparsing을 사용하여 목록을 "파싱"
답변
예, 인 경우 입력을 버리지 않도록 지시했습니다. 당신은 Combine
연결자와 함께합니다.
>>> from pyparsing import *
>>> myList = Word(alphas) + ZeroOrMore(',' + Optional(White()) + Word(alphas))
>>> myList.leaveWhitespace()
>>> myList.parseString(s)
(['abc', ',', 'def', ',', ' ', 'ghi'], {})
는 "deparse"하려면 :
>>> reconstitutedList = Combine(myList)
>>> reconstitutedList.parseString(s)
(['abc,def, ghi'], {})
제공 여기
>>> s = 'abc,def, ghi'
목록의 정확한 텍스트를 잡고 파서입니다 :
것은 이제 귀하의 의견이 있다고 가정 해 봅시다 너는 초기 입력을 되 돌린다. 모든 여분의 공백 토큰으로 주위에 떠을 가진 것은 일반적으로 편리하지 않습니다, 당신은 우리가 명시 적으로 myList
에 떨어져 를 건너 뛰는 공백 설정했다는 것을 알게 될 것이다 :
는하지만이 비용에 포함되어 있습니다. 여기에 공백 스트립 버전 : 당신이 시점에서 다시 문자 입력을받지 못하고있어
>>> myList = Word(alphas) + ZeroOrMore(',' + Word(alphas))
>>> myList.parseString(s)
(['abc', ',', 'def', ',', 'ghi'], {})
>>> reconstitutedList = Combine(myList, adjacent=False)
>>> reconstitutedList.parseString(s)
(['abc,def,ghi'], {})
주, 그러나 이것은 당신을 위해 충분 될 수 있습니다. 또한 공백을 건너 뛰는 것을 허용하도록 명시 적으로 Combine에 알려야한다는 것을 기억하십시오.
실제로 대부분의 경우 구분 기호는 신경 쓰지 않습니다. 파서가 항목 자체에 집중하기를 원합니다. 편리하게 모두 구분 기호 및 공백을 제거합니다 commaSeparatedList
라는 기능이있다 :
>>> myList = commaSeparatedList
>>> myList.parseString(s)
(['abc', 'def', 'ghi'], {})
이 재구성 된 문자열이 이해하기, 그래도 "는 deparsing은"단계는 충분한 정보를 가지고 있지 않습니다
>>> reconstitutedList = Combine(myList, adjacent=False)
>>> reconstitutedList.parseString(s)
(['abcdefghi'], {})
나는이 막연한 질문에 대해 당신이 정말로 이것을 취하여 도망 갔다. 그것을 사랑해! – jathanism
훌륭한 답변과 pyparsing 주제에 대한 고맙습니다! 또한 당신이 묘사하는 것과 유사한 기능을 위해 최근에 추가 된'originalTextFor' 헬퍼 메소드를 확인해보십시오. 그러나 이것은 개입하는 공백을 보존 할 수 있습니다. – PaulMcG
멋진 팁, Paul! 나는 그런 것들을 찾고 있었지만 찾지 못했습니다. 1) pyparsing 페이지의 API 문서 링크가 깨졌고, 2) 내가 찾은 UCSC 온라인 문서가 아마도 날짜가 있기 때문입니다. 바라건대 우리는 하나 또는 다른 업데이 트를 얻을 수 있습니다! 최신 소스 + doc을 살펴 보겠습니다. –
아마도 "이전"과 "후"의 예를 포함하도록 질문을 편집 할 수 있습니까? – PaulMcG
이것은 관련 토론 스레드 (http://pyparsing.wikispaces.com/message/view/home/19406599)로, pyparsing을위한 "양방향"기능에 대해 논의 할 수 있습니다. – PaulMcG