나는 같은 문자열을 할 수 있어야한다 : 나는이 솔루션은 shlex 모듈을 포함 위하여려고하고있다 (#python에서 힌트)는 느낌이쉼표로 구분 된 문자열을 목록 (구문)으로 구문 분석 할 수 있습니까?
['foo', 'bar', 'one, two', 'three four']
:에
'''foo, bar, "one, two", three four'''
.
나는 같은 문자열을 할 수 있어야한다 : 나는이 솔루션은 shlex 모듈을 포함 위하여려고하고있다 (#python에서 힌트)는 느낌이쉼표로 구분 된 문자열을 목록 (구문)으로 구문 분석 할 수 있습니까?
['foo', 'bar', 'one, two', 'three four']
:에
'''foo, bar, "one, two", three four'''
.
shlex 모듈 솔루션을 사용하면 이스케이프 된 따옴표, 한 따옴표로 다른 이스케이프 문자 및 모든 멋진 물건 쉘을 지원할 수 있습니다. 내가 정말 파이썬의 정규식 엔진을 잘 모르겠지만
>>> my_splitter = shlex.shlex('''"test, a",'foo,bar",baz',bar \xc3\xa4 baz''',
posix=True)
>>> my_splitter.whitespace = ',' ; my_splitter.whitespace_split = True
>>> print list(my_splitter)
['test, a', 'foo,bar",baz', 'bar \xc3\xa4 baz']
당신이 뭔가를 할 수 있습니다 : 그것은 꽤 할 필요가없는 경우
>>> import re
>>> pattern = re.compile(r'\s*("[^"]*"|.*?)\s*,')
>>> def split(line):
... return [x[1:-1] if x[:1] == x[-1:] == '"' else x
... for x in pattern.findall(line.rstrip(',') + ',')]
...
>>> split("foo, bar, baz")
['foo', 'bar', 'baz']
>>> split('foo, bar, baz, "blub blah"')
['foo', 'bar', 'baz', 'blub blah']
, 이것은 당신의 방법에 당신을 얻을 수 있습니다 : 그것은 당신이 원하는 방법 복잡한 따라
def f(s, splitifeven):
if splitifeven & 1:
return [s]
return [x.strip() for x in s.split(",") if x.strip() != '']
ss = 'foo, bar, "one, two", three four'
print sum([f(s, sie) for sie, s in enumerate(ss.split('"'))], [])
get ... 여러 유형의 인용을 허용 하시겠습니까? 어쨌든 이스케이프 된 따옴표는?
귀하의 구문은 파이썬 표준 라이브러리에서 지원하는 일반적인 CSV 파일 형식, 같은 매우 같습니다
import csv
reader = csv.reader(['''foo, bar, "one, two", three four'''], skipinitialspace=True)
for r in reader:
print r
출력을 :
['foo', 'bar', 'one, two', 'three four']
HTH를!
그래, csv 모듈은 당신이 원하는 곳이다. –
그냥 테스트하고 치료를 작동합니다. shlex 모듈보다 더 간단한 구문입니다. 그래서 이것은 내 표를 얻습니다! – DaGaMs
좋은 간단한 해결책 upvoted. – PythonTester
내가, 정규 표현식 당신이 여기 찾고있는 것 말하고 싶지만 :
>>> import shlex
>>> my_splitter = shlex.shlex('''foo, bar, "one, two", three four''', posix=True)
>>> my_splitter.whitespace += ','
>>> my_splitter.whitespace_split = True
>>> print list(my_splitter)
['foo', 'bar', 'one, two', 'three', 'four']
따옴표 예를 탈출했다.
게으른 일치를 사용한다고 가정하면 배열에 넣을 수있는 문자열에 일치하는 항목을 가져올 수 있습니다.
이것은 사양에없는 3과 4를 나눕니다. –
최종 "three four"분할을위한 수정이 필요합니다. – tzot
단순히 my_splitter.whitespace + = ','= ','로 변경하면되지만 각 요소를 제거해야합니다. –