3

IMDBインターフェイスからダウンロードしたファイル(ratings.lst)があります。コンテンツは次の形式のようです:-

Distribution   Votes      Rating  Title
0000001222     297339     8.4     Reservoir Dogs (1992)
0000001223     64504      8.4     The Third Man (1949)
0000000115     48173      8.4     Jodaeiye Nader az Simin (2011)
0000001232     324564     8.4     The Prestige (2006)
0000001222     301527     8.4     The Green Mile (1999)

私の目的は、このファイルをCSVファイル(コンマ区切り)に変換して、次の望ましい結果(1行の例)を作成することです。

Distribution   Votes      Rating  Title
0000001222,    301527,    8.4,    The Green Mile (1999)

私はテキストパッドを使用しており、正規表現ベースの検索と置換をサポートしています。上記の望ましい結果を達成するために必要な正規表現の種類がわかりません。誰かがこれについて私を助けてくれますか?前もって感謝します。

4

4 に答える 4

0

MY BADこれはC#プログラムです。別の解決策のためにそれを残しておきます。

ignorepatternの空白は、パターンにコメントを付けるためのものです。

これにより、CSVファイルに配置できるデータが作成されます。注CSVファイルには、例のようにオプションのホワイトスペースが含まれていません。

string data =@"Distribution   Votes      Rating  Title
0000001222     297339     8.4     Reservoir Dogs (1992)
0000001223     64504      8.4     The Third Man (1949)
0000000115     48173      8.4     Jodaeiye Nader az Simin (2011)
0000001232     324564     8.4     The Prestige (2006)
0000001222     301527     8.4     The Green Mile (1999)
";

string pattern = @"
^                     # Always start at the Beginning of line
(                     # Grouping
   (?<Value>[^\s]+)     # Place all text into Value named capture
   (?:\s+)              # Match but don't capture 1 to many spaces
){3}                  # 3 groups of data
(?<Value>[^\n\r]+)    # Append final to value named capture group of the match
";

var result = Regex.Matches(data, pattern, RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace)
                  .OfType<Match>()
                  .Select (mt => string.Join(",", mt.Groups["Value"].Captures
                                                                    .OfType<Capture>()
                                                                    .Select (c => c.Value))
                                                                    );

Console.WriteLine (result);

/* output
Distribution,Votes,Rating,Title
0000001222,297339,8.4,Reservoir Dogs (1992)
0000001223,64504,8.4,The Third Man (1949)
0000000115,48173,8.4,Jodaeiye Nader az Simin (2011)
0000001232,324564,8.4,The Prestige (2006)
0000001222,301527,8.4,The Green Mile (1999)
*/
于 2012-04-20T13:26:29.977 に答える
0

"最初にすべてをに置き換えてから、次の""ようにします。

検索:^\([0-9]+\)[ \t]+\([0-9]+\)[ \t]+\([^ \t]+\)[ \t]+\(.*\)
置換:\1,\2,\3,"\4"

于 2012-04-20T08:24:28.470 に答える
0
  • F8を押して[置換]ダイアログを開きます
  • 正規表現が選択されていることを確認してください
  • 何を見つけるか:置く:^([[:digit:]]{10})[[:space:]]+([[:digit:]]+)[[:space:]]+([[:digit:]]- {1,2}\.[[:digit:]])[[:space:]]+(.*)$
  • 置換:置く\1,\2,\3,"\4"
  • [すべて置換]をクリックします

ここに画像の説明を入力してください

注:これは、ratings.lstのフィールド間に1つ以上のスペースを使用します。わかっている場合は、スペースの正確な数を指定する方がよい場合があります。

また、注:通常はそうではないように、カンマで区切られた項目の間にスペースを入れませんでしたが、それらを自由に追加してください

最後の注意:映画のタイトルを引用符で囲んで、コンマが含まれていてもCSV形式が崩れないようにします。これを別の方法で処理することをお勧めします。

于 2012-04-20T08:08:47.253 に答える
0

他の正規表現はやや複雑です。空白は最初の3列に表示されないことが保証されているため、派手な一致を行う必要はありません。「空白で区切られた3列」で十分です

^(.+?)\s+(.+?)\s+(.+?)\s+(.+?)$次の出力を\1,\2,\3,"\4"与えるように置き換えてみてください(Notepad ++を使用)

Distribution,Votes,Rating,"Title"
0000001222,297339,8.4,"Reservoir Dogs (1992)"
0000001223,64504,8.4,"The Third Man (1949)"
0000000115,48173,8.4,"Jodaeiye Nader az Simin (2011)"
0000001232,324564,8.4,"The Prestige (2006)"
0000001222,301527,8.4,"The Green Mile (1999)"

欲張りでない数量詞、を使用し.+?て、誤って一致する可能性が高くなるのを防ぐことに注意してください。また、映画のタイトルにコンマが含まれている場合に備えて、4番目の列を引用符""で囲んでいます。そうでない場合、ファイルの読み取りに使用するソフトウェアはAvatar, the Last Airbender2列として解釈されます。

素敵な表形式の配置はなくなりましたが、Excelでファイルを開くと、問題なく表示されます。

または、Excelですべてを実行します。

于 2012-04-20T13:40:52.973 に答える