2016-06-12 3 views
0

문자열에 목록을 넣어야합니다. 예를 들어 나는Python3의 우아한 문자열 파싱

C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C 

['C', 'C', '.0033', '.0016', 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4', 'C'] 

그래서 따옴표로 모든 것이 하나의리스트 요소가됩니다 될 것을 요구; 그렇지 않으면 공백으로 구분 된 모든 것이 단일 목록 요소가됩니다.

내 첫번째 생각은 다시 함께 인용 섹션에있는 것들을 배치하고 새 배열에 '를 포함하지 않는 항목을 배치하고, 간단한 분할했다 :

>>> s.split() 
['C', 'C', '.0033', '.0016', "'International", 'Tables', 'Vol', 'C', 'Tables', '4.2.6.8', 'and', "6.1.1.4'", 'C'] 
>>> arr = [] 
>>> i = 0 
>>> while i < len(s): 
     v = '' 
     if s[i].startswith("'"): 
      while not s[i].endswith("'"): 
       v = v.append(s[i]+ " ") 
       i += 1 
      v.append(s[i]) 
      arr.append(v) 
     else: 
      arr.append(s[i]) 

을하지만,이 전략은 꽤 못생긴 것입니다. 그리고 그 문자열이 단일 공간에서 분리되었다고 가정해야합니다.

s.partition("'")

은 매우 유망한 듯 :

>>> s.partition("'") 
('C C .0033 .0016 ', "'", "International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C") 

하지만 난을 통해 반복으로 다시 분할해야하기 때문에 그것은 어색한, 그리고 어느 는 따옴표로이라고 할 수로 상황에 맞는입니다.

위에서 설명한대로이 문자열을 분할하는 간단한 Python3 방식이 있습니까?

답변

2

shlex 모듈을 사용할 수 있습니다. 예 :

import shlex 

print(shlex.split("C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C")) 
+0

OMG 어떻게 알았습니까? – user14717

+0

나쁜 단어 선택. 편집 된 @NickThompson – Zroq