2

.csv ファイルには、次のような行があります。

10,"nikhil,khandare","sachin","rahul",viru  

コンマ (,) を使用して行を分割したい。ただし、単語を二重引用符 (" ") で区切りたくありません。コンマを使用して分割すると、次の項目を含む配列が取得されます。

10  
nikhil  
khandare  
sachin  
rahul  
viru  

しかし、二重引用符で囲まれた項目をコンマで分割したくありません。私の望ましい結果は次のとおりです。

10
nikhil,khandare
sachin
rahul
viru

これを整理するのを手伝ってください。

4

2 に答える 2

2

フィールドを区切るために使用される文字は、フィールド自体に存在してはなりません。可能であれば、csv ファイルのフィールドを区切るために に置き換える,;、作業が楽になります。ただし、セパレータとして使用することに行き詰まっている場合は,、次の正規表現を使用して各行を分割できます。

/((?:[^,"]|"[^"]*")+)/

たとえば、Python では次のようになります。

import re
s = '10,"nikhil,khandare","sachin","rahul",viru'
re.split(r'((?:[^,"]|"[^"]*")+)', s)[1::2]
=> ['10', '"nikhil,khandare"', '"sachin"', '"rahul"', 'viru']

質問に示されている正確な結果を得るには、これらの余分な"文字を削除するだけです。

[e.strip('" ') for e in re.split(r'((?:[^,"]|"[^"]*")+)', s)[1::2]]
=> ['10', 'nikhil,khandare', 'sachin', 'rahul', 'viru']
于 2013-06-23T16:24:49.280 に答える
1

常にそのような単純な構造を持っている場合は、最初の数字とコンマを破棄した後、「、」(はい、引用符付き)で分割できます

そうでない場合は、入力を左から右に解析する非常に単純な形式のステート マシンを使用できます。内部引用符と外部引用符の 2 つの状態があります。正規表現をすでに知っている場合は、正規表現も良い (そしてより簡単な) 方法です (これらは基本的にステート マシンと同等であり、別の形式であるため)。

于 2013-06-23T16:25:38.247 に答える