2016-06-30 105 views
2

約200,000レコードを格納するtxtファイルを修正します。 すべてのレコードはカンマで区切られた8つの列で構成されます。ワイルドカードをメモ帳で置き換えてください。++

ただし、一部のデータが壊れて余分なカンマが付きます。私は第3列で起こりそうな余分なカンマを取り除く必要があります。

5180,1103131373、Good Day、ABC、12,34,75484,7/1/2014 12:00:00 AM、< ---正しい形式 5180,1103131373、Good、Day、ABC、12,34,75484,7/1/2014 12:00:00 AM、< - 間違い

つまりこの例ではGood Dayは2つではなく1つの列に格納します。

私は正規表現(.*,.*,.*),(.*,.*,.*,.*,.*,.*,) でそれらを見つけることができますが、私は\1\2を使用して、余分なコンマを交換しようとすると、一部のレコードは、任意の入力は大歓迎です

が欠落しています。前もって感謝します。

+1

'。*'を '[^、\ r \ n] *'に置き換え、パターン開始で '^'を追加します。 –

+0

btw、カンマを削除するのではなく、3列目の内容を二重引用符で囲む方が良いでしょうか? 「Good、Day」→「Good、Day」「 – miroxlav

+0

WiktorStribiżewありがとうございます。正規表現の問題を解決した:(^ [^、\ r \ n] *、[^、\ r \ n] *、[^、\ r \ n] *) *、[^、\ r \ n] *、[^、\ r \ n] *、[^、\ r \ n] *、)\ 1 \ 2に置き換えられました – JnJ

答えて

0

.*[^,\r\n]*に置き換え、パターン開始時に^を追加する必要があります。

使用

^([^,\r\n]*,[^,\r\n]*,[^,\r\n]*),([^,\r\n]*,[^,\r\n]*,[^,\r\n]*,[^,\r\n]*,[^,\r‌​\n]*,[^,\r\n]*,) 

\1\2に置き換え。

無効化された文字クラスは、,、CRおよびLFシンボル以外の任意の文字に一致します。 \1は、グループ1(([^,\r\n]*,[^,\r\n]*,[^,\r\n]*))の値の逆参照であり、\2は、グループ2(([^,\r\n]*,[^,\r\n]*,[^,\r\n]*,[^,\r\n]*,[^,\r‌​\n]*,[^,\r\n]*,))の値の逆参照です。

関連する問題