4

クリーンアップする必要のあるCSVファイルがあります。これは1回限りのことなので、可能であればNotepad++で実行したいと思います。

CSVファイルには2つのフィールドがあり、そのうちの1つは引用符で囲まれています。引用符で囲まれたフィールド内からキャリッジリターンを削除したいのですが。私はこのパターンを使おうとしていましたが、うまくいきません...

(.*)\"(.*)\n(.*)\"(.*)

また、間違っている場合は訂正してください。ただし、「replacewith」の値は次のようになります。

\1\2\3\4

前もって感謝します。

また、迅速でダーティなPERLスクリプトなどの代替ソリューションも利用できます。

4

8 に答える 8

2

StackOverflowを何度も探し回った後、同様の問題について提案された正規表現パターンを見つけました。これは、一重引用符から二重引用符にわずかに変更するだけで済みました。私はそれをPERLで実行しました。うまくいきました!残念ながら、クレジットが必要な場所にクレジットを付与する元の投稿が見つかりません。

とにかく、これは私が最終的に使用したものです。皆さんの助けに感謝します!

$string123 =~ s/((?:^[^"]*"|(?!^))[^"]*?(?:"[^"]*"[^"]*?)*?)(\n{1,})/$1/g; 
于 2009-06-24T17:49:40.290 に答える
2

他の誰かがこれを見つけて、notepad ++でこの問題に対する本当の正当な答えが必要な場合は、次のことを検討してください。

CRとLFを表示するには、段落記号/非表示文字の表示コマンドを使用します。

ここで、各csvレコードの最後にある実際の改行は通常(ファイルの作成内容によって異なります)LFのみであることに注意してください。実際のレコード区切り文字にはCRがありません。そして、フィールド内に埋め込まれ、引用符で囲まれたキャリッジリターンは、通常、 CR / LF(2つの非印刷文字を並べてCRとLF)であることに注意してください。

だから今、それは簡単です。CRLFの組み合わせを強調表示し、f&rをプルアップすると、'find what:'エントリは、印刷できないCRLFの組み合わせの2つの空のボックスになります。置換フィールドを空のままにして、実行します。

多田!引用符内に埋め込まれたキャリッジリターンはなくなり、実際の改行はすべてそのまま残ります。

于 2012-04-12T18:33:42.710 に答える
1

バリーには解決策があり、それは私がどこでも見つけることができる最良の解決策であるように見えます。最初、この解決策がPerlで機能していないことがわかったので、詳しく調べました。

私が見つけたのは、その正規表現へのわずかな調整が機能したということです。このニュアンスの原因はわかりませんが、Perlは\ nを検索するときにキャリッジリターンを見つけることができませんが、16進形式/x0Dで示されるキャリッジリターンは見つけます。


したがって、代わりに:

$ string123 =〜s /((?:^ [^ "] " |(?!^))[^ "]?(?:" [^ "] " [^ "]?)?)(\ n {1 、})/ $ 1 / g;


これは私のために働いた:

$ string123 =〜s /((?:^ [^ "] " |(?!^))[^ "] ?(?:" [^ "] " [^ "] ?)?)(\ x0D {1 、})/ $ 1 / g;

バリー、大いに助けてくれてありがとう!

于 2011-08-03T19:54:30.257 に答える
1

私はその問題に遭遇し、Notepad++を使用して勝ちました。正規表現の検索と置換で\r\ nを使用するようになったため、Shreyasの回答は間違っているか古くなっています。それは私が以下を使用したと言った:

[^"]"(([^"]*)\r\n([^"]*))+"

それが機能する方法は、それが一致するということです:

[somethin0]"[somethin1]NEWLINE[somethin2]"

ここで、somethin1とsomethin2は\2と\3(および\ 1は内部全体)であり、somethin0は文字を区切っています(コンマの可能性が最も高い)。必要なものを取得するには、次のように置き換えます。

[somethin0]"\2 \3"

そして、期待される結果を手に入れましょう!まあ、ほとんど。そのような単一の置換は、引用符内の単一の改行文字を削除します。ただし、これはボタンを数回スパムするという小さな不便にすぎないはずですreplaceAll(「数回」は引用符の間に存在する改行の最大量です)

于 2014-08-20T08:33:47.013 に答える
0

ええと...私の正規表現はひどいです、そして私はあなたの質問に答えることができません。ただし、これは、必要なことを実行できるはずの、使用できる小さなJS関数です。

function removeNewLines(str){
    var quotedStrings = str.split(/["'](.*)?["']/g),
        i = 0;

    for( ; i < quotedStrings.length; i++){
        str = str.replace(quotedStrings[i], quotedStrings[i].replace(/[\r\n]/g,""));
    }
    return str;
}
removeNewLines("\"asdf\r\nas\"asdf\'as\nd\'asdf\"asdf\r\nasf\r\n\"") === "\"asdfas\"asdf'asd'asdf\"asdfasf\"";
于 2009-06-23T20:23:03.573 に答える
0

Notepad ++の問題は、\nや\tなどの特殊文字を使用して正規表現を実行できないことです。正規表現は純粋な正規表現である必要があり、特殊文字には拡張検索モードがあります。

可能であれば、Eclipseで正規表現を実行することをお勧めします。

それが不可能な場合は、ここに迅速で汚い解決策があります

すべての\nを、ファイルに出現しない#または&などの特殊文字に置き換えます。

次に、正規表現を実行して、引用符内のこの特殊文字を探し、削除します

最後に、残りの特殊文字を\nに置き換えます

于 2009-06-23T19:10:23.487 に答える
0

πボタンをクリックして、非表示の文字を表示します。次に、1つのキャリッジリターン文字を選択します。Ctr + Hを押して、空の文字列に置き換えます

それがあなたのために働くことを願っています。

于 2009-06-23T19:29:23.307 に答える
0

これがNotepad++専用の回答です

メニュー:TextFX > TextFX Edit > Delete空白行

そのメニュー項目内には、[余剰空白行の削除]オプションもあります。

于 2010-05-14T14:01:55.723 に答える