2017-07-25 19 views
0

間EOLを検索と置換:正規表現:このような複数行の文字列で引用符

She Loves You [Mono],"Past Masters, Vol. 1",4,"She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah, yeah" 
Eight Days A Week,Beatles For Sale,8,"Eight days a week 
I love you. 
Eight days a week 
Is not enough to show I care." 

私は¶」のような置換文字と引用符間EOL(\ Rの\ n)がを交換したいです"(ASCIIコード182)を使用して、この文字列を1行にします。

結果は次のようになります。

She Loves You [Mono],"Past Masters, Vol. 1",4,"She loves you, yeah, yeah, yeah¶She loves you, yeah, yeah, yeah¶She loves you, yeah, yeah, yeah, yeah" 
Eight Days A Week,Beatles For Sale,8,"Eight days a week¶I love you.¶Eight days a week¶Is not enough to show I care." 

私はStackOverflowの上で見られる様々な正規表現関連のソリューションを試してみましたが、私は私が欲しいものにそれらを適応することができませんでした。

私はAHK機能では、この正規表現式を使用します。

RegExReplace(Haystack, NeedleRegEx [, Replacement = "", OutputVarCount = "", Limit = -1, StartingPosition = 1]) 

RegExReplace(MyText, NeedleRegEx???, "¶") 

すべてのヘルプは大歓迎します。

+0

いいえ、それは修正されません。課題は、引用符の間だけで置き換えを行うことです。 – JnLlnd

+0

私は質問をより明確にします。 – JnLlnd

+0

私の質問は十分ではありませんでした。私はタイトルの中だけで "引用符の間"の要件を言及し、再び質問自体を述べなかった。申し訳ありません。編集した質問をご覧ください。 – JnLlnd

答えて

0

文字列を解析してそのように操作できますか?

str = 
(
She Loves You [Mono],"Past Masters, Vol. 1",4,"She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah, yeah" 
Eight Days A Week,Beatles For Sale,8,"Eight days a week 
I love you. 
Eight days a week 
Is not enough to show I care." 
) 
outStr := "" 
Loop, Parse, str, `" 
{ 
    field := A_LoopField 
    StringReplace, field, field, `r,, All 
    StringReplace, field, field, `n, ¶, All 
    outStr .= field 
} 
MsgBox % outStr 
ExitApp 
+0

私は "シンプル置換"。課題は、引用符の間だけで置き換えを行うことであり、単純な解決策ではすべてではありません。 – JnLlnd

+0

私は質問をより明確にします。 – JnLlnd

+0

文字列を解析する必要があります。私は自分の答えを変更しました。 – fischgeek

0

RegExを使用したソリューションはないようですので、maestrith(AHK Forum)の解説をここに掲載します。 EOLを引用符で囲み、引用符をカプセル化して保持します。 StrSplitを使用してコンテンツ全体を読み込んで処理し、引用セクションを分離し、RegExReplaceとStringReplaceの組み合わせで処理します。私はまだ非常に大きなファイルでそれをテストしなければなりません。これは、一度に1つのチャンネルでコンテンツを処理する別のスクリプトと比べてどのように実行されるのかを確認する必要があります。

#SingleInstance,Force 
info= 
(
She Loves You [Mono],"Past Masters, Vol. 1",4,"She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah, yeah" 
Eight Days A Week,Beatles For Sale,8,"Eight days a week 
I love you. 
Eight days a week 
Is not enough to show I care." 
) 
for a,b in StrSplit(info,Chr(34)){ 
    if(!Mod(A_Index,2)){ 
     replace:=RegExReplace(b,"\R",chr(182)) 
     StringReplace,info,info,%b%,%Replace% 
    } 
} 
Gui,Font,s10 
Gui,Add,Edit,w1000 h200 -Wrap,%Info% 
Gui,Show 
0

私の元の質問に答えることができない場合でも、これを回答として追加します。これはRegExを使用しませんが、結局のところ、以前の回答の試行よりも速いです(3メガcsvファイルで約3倍から5倍速くなります)。

#SingleInstance,Force 
info= 
(
She Loves You [Mono],"Past Masters, Vol. 1",4,"She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah 
She loves you, yeah, yeah, yeah, yeah" 
Eight Days A Week,Beatles For Sale,8,"Eight days a week 
I love you. 
Eight days a week 
Is not enough to show I care." 
) 
blnInsideEncapsulators := false 
Loop, Parse, info 
    ; parsing on a temporary copy of info - so we can update the original info inside the loop 
{ 
    if (A_Index = 1) 
     info := "" 
    if (blnInsideEncapsulators AND A_Loopfield = "`n") 
     info := info . Chr(182) 
    else 
     info := info . A_Loopfield 
    if (A_Loopfield = """") 
     blnInsideEncapsulators := !blnInsideEncapsulators ; beginning or end of encapsulated text 
} 
Gui,Font,s10 
Gui,Add,Edit,w1000 h200 -Wrap,%Info% 
Gui,Show 

誰かが完全なRegExソリューションを提供している場合には、私はこのスレッドを回答なしで残します。決して知らない...

あなたのご意見をいただきありがとうございます。

関連する問題