区切り文字の間のものを除くすべての改行文字:試合、私は以下のCSVファイル与えた
"A";"B
C";"D"
"E";"F"
"G
H"
をそして私は2つの間に直接配置するものを除いて、テキストに配置されている改行文字を取り除く必要がありますデリミタ(その場合は二重引用符""
)。 2つの二重引用符("\n"
)の間の唯一の記号である改行文字のみがファイルに存在する必要があります。
アイデアはその意志、正規表現を持つことです。それぞれの行は、常に起動するよう
は、行の最後にあるものを除き、二重引用符(間のものを除いて、すべての新しい行の文字を検索し、二重引用符で終わる)をスペースで置き換えます。
だから、上記のファイルを処理した結果は次のようになります。
つまりそう"A";"B C";"D"
"E";"F"
"G H"
、正規表現の区切り文字の間に改行文字を検索する必要があります。
が"\n"
\n
を検索
次の正規表現を試しました:[^"\n"][\n]
\n
と一致するように"\n"
、しかし、崇高なテキスト2でこれをテストすることは望んでいた改行文字でなく、単一の文字、その前にを選択:私はスペースを持つもの見つかった場所を交換するとき、それはまた置き換えることを意味します
B
およびG
文字ですが、これは予期しないものです。
また、私はその正規表現を使用してC#コードで置換演算を実行することをお伝えしたいと思います。
私が望むようにこれを動作させる方法はありますか?
EDIT 2016年7月14日:
私はOmegaMan何を試してみました以下の提案。 上記のケースではうまく動作しますが、ファイル内の複数行にまたがっている可能性があります。例:
考えるとCSVファイル(後にC#コードで "pathToTheExampleFile" と呼ばれる):
"A";"B C";"D"
"E";"F";"Part1 Part2
Part3
";
: "A";"B
C";"D"
"E";"F";"Part1
Part2
Part3
";
コードでOmegaManのソリューションを使用して、私はこの結果を得ます
これは、次のようになります。
"A";"B C";"D"
"E";"F";"Part1 Part2 Part3 ";
これまで、単にそのようなOmegaManの操作を交換3回、実行した後:
string data = File.ReadAllText(@"pathToTheExampleFile");
string pattern = @"(?<=\x22[^\x22\r\n]+)([\r\n]+)";
var result = Regex.Replace(data, pattern, " ");
result = Regex.Replace(result, pattern, " ");
result = Regex.Replace(result, pattern, " ");
Console.WriteLine(result);
を私は希望通りの結果を得ます。だから、必要なものにマッチする複数行です。 正規表現が機能しないケースはありません。
正規表現を変更する方法が分かっていれば、感謝します。
EDIT 2016年7月15日:
私はそれがこの醜いソリューションの追加機能することを追加する必要があります。最後に
while (Regex.IsMatch(data, pattern))
{
data = Regex.Replace(data, pattern, " ");
}
を、data
は、予想される文字列が含まれています。それは非常に醜いですが、私はそれが正規表現と何とかやることができると確信しています。
\n(?!")
をしててそれを置き換えます:あなたが検索する先読みベースの正規表現を使用することができます
するTry見る(http://regexstorm.net/tester?p=(%3F% 3C%3d%22%5b%5e%22%5d *)%5cr%3f%5cn(%3f!%22)&i =%22A%22%3b%22B%0d%0aC%22%3b%22D%22 %0d%0a%22E%22%3b%22F%22%0d%0a%22G%0d%0aH%22&r = +)。 –