'\\\n'
値を持つ列を含むcsvファイルがあり、'\\\t'
改行とタブがエスケープされています。ただし、各行を文字列配列に分割したい。
具体的に分割する方法'\n'
は'\\\n'
?
私はRegex.Splitを見ていますが、それは正しい方向ですか? 試してみRegex.Split(input, @"[^\\]\n");
ましたが、結果は正しいようですが、[^\] が原因であると思われる、常に前の 1 文字が欠落しています。
Regex.Split を使用したい場合は、一致しますが(同様に)@"(?<!\\)\\n"
一致\n
せず、何も切り取られません。後ろ向きの否定は一致の一部を形成しないため、余分な文字は削除されません。\\n
\\\n
(?<!\\)
CSV ファイルを解析している場合は、TextFieldParser
既にフレームワークに含まれているものを使用してみてください。区切りファイルを解析するときに発生するすべての特定の問題に対処するという頭痛の種から解放されます。
以下で説明するように、これは の一部ですがMicrosoft.VisualBasic.dll
、これはデフォルトでフレームワークに付属しているため、参照が必要です。と呼ばれていますがVisualBasic
、VB 固有のものではありません。
Regex.Split(input, @"[^\\]\n");
上記の正規表現の問題は、角かっこが 1 つの文字のみに一致し、それらが一致するものが一致自体の一部と見なされることです。つまり、\n の直前の文字は分割文字列の一部と見なされ、それに応じて処理されます。
あなたが探しているのは、次のように使用される否定的な後読みだと思います。
(?<!DO NOT MATCH THIS)match
後読みと先読みにより、一致したテキストを一致の一部として含めることなく、一致が存在することが保証されます。
あなたが探しているのは次のようなものだと思います:
Regex.Split(input, @"(?<!\\)\n");
それが役立つことを願っています!
これはどう:
(?<=^|^[^\\]|[^\\]{2})\\(n|t)
これにより、入力文字列の先頭または 2 番目の位置にある\n
およびが考慮されます。\t