2012-08-28 2 views
2

어딘가에서 문자열을 받고 문자열은 일련의 매개 변수입니다. 매개 변수는 공백으로 구분됩니다. 작업은 문자열을 param 목록으로 구문 분석합니다. 모든 params는 type string입니다. 예를 들어param 문자열을 구문 분석하는 최고의 파이썬 방법?

:

input : "3 45 5.5 a bc" 
output : ["3","45","5.5","a","bc"] 

상황이 될 작은, 문자열이 공백을 포함 전송 "를 사용할 필요가 인용 할 경우 복잡한.

input: "3 45 5.5 \"This is a sentence.\" bc" 
output: ["3","45","5.5","This is a sentence.","bc"] 

하지만 문장에 인용 부호가 포함 된 경우 어떻게됩니까? 이스케이프 문자 사용 \" ->"\\ ->\

input: "3 45 5.5 \"\\\"Yes\\\\No?\\\" it said.\" bc" 
output: ['3','45','5.5','"Yes\\NO?" it said.','bc'] 

파이썬이 일을 할 수있는 우아한 방법이 있습니까?

추신. 나는 정규식이 이것을 해결할 수 있다고 생각하지 않는다.

+2

[csv] (http://docs.python.org/library/csv.html) 모듈은 공백으로 구분 된 방언을 사용하고 있습니까? –

+0

마지막 입력 문자열은 백 슬래시와 관련하여 약간 떨어져 있습니다. 그것을 정정하면 신속하게 적절한 답을 얻을 수 있습니다. –

+2

"우아한 파서"와 "쓰레기 데이터"가 잘 어울리지 않습니다. –

답변

8

사용 shlex.split() function :

>>> import shlex 
>>> shlex.split("3 45 5.5 a bc") 
['3', '45', '5.5', 'a', 'bc'] 
>>> shlex.split("3 45 5.5 \"This is a sentence.\" bc") 
['3', '45', '5.5', 'This is a sentence.', 'bc'] 
>>> shlex.split("3 45 5.5 \"\\\"Yes\\\\No?\\\" it said.\" bc") 
['3', '45', '5.5', '"Yes\\No?" it said.', 'bc'] 

당신은 다음의 shlex.shlex function와 사용자 정의 파서를 만들고 그 속성을 설정하여 행동입니다 변경할 수 있습니다. 예를 들어 .whitespace 속성을 ', \t\r\n'으로 설정하면 쉼표로도 단어를 구분할 수 있습니다. 그런 다음 shlex 인스턴스를 목록으로 다시 변환하여 입력을 분할하면됩니다.

+0

잘 작동합니다! 감사합니다! – Max

관련 문제