たいのですが解析のためにカンマ区切りの文字列をリスト(警告)?

StackOverflow https://stackoverflow.com/questions/118096

  •  02-07-2019
  •  | 
  •  

質問

だけますよう、ご協力をお願いいような文字列:

'''foo, bar, "one, two", three four'''

['foo', 'bar', 'one, two', 'three four']

いい感じ(ヒントから#pythonの解決へのshlexモジュールです。

役に立ちましたか?

解決

のshlexモジュールソリューションで引用符は、見積もりの脱出も、すべての派手なもの殻に対応しています。

>>> 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']

引用符の例:

>>> 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']

他のヒント

でどのように複雑なため...いることのできるサッカーの引用.い引用符?

ご書式んだようなものである共通のCSVファイル形式の応用では、Python標準ライブラリ:

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 モジュールです。いうもおかしくなってしまいそうです。入力データはCSVによりシェルの構文はうshlexを解析し).

なにができるようなこと:

>>> 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']

いと思うんで正規表現するか探しでしたら、こんなものすごく馴染みのPythonの正規表現エンジンです。

仮に使用すぐマッチ、セットの試合を文字列ができるしようとしている配列になります。

っていることを確認してくださいが必要か、こうごう:

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('"'))], [])
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top