2016-08-09 7 views
1

でlookaroud str_replaceで改行が含まれている一致文字列は、私がPARTITIONED BYと正規表現、R

として格納され、これらのコマンドは

my_string="esrhjg erguhg rziughrtPARTITIONED BY hzueirghf zreeuifh iuehg reuhg riutghSTORED ASiugh oer hfz" 
p="(?<=PARTITIONED BY).*(?=STORED AS)" 
str_replace(my_string,p,"TO REPLACE") 
を仕事の間に部分文字列を置換します

ものcammandsは、文字列 "間" 改行を\ n含まれている場合、str_replaceを動作させるためにどのよう

my_string="esrhjg erguhg rziughrtPARTITIONED BY hz\nueirghf zreeuifh iuehg reuhg riutghSTORED ASiugh oer hfz" 
p="(?<=PARTITIONED BY).*(?=STORED AS)" 
str_replace(my_string,p,"TO REPLACE") 

(私は、\ nを追加)ではないのですか?

答えて

1

すべてのstringr機能で使用されるICU正規表現フレーバでは、ドットは任意の文字に一致しますが、改行はと一致します。

あなたはインライン (?s)修飾子使用することができます

- "(?s)(?<=PARTITIONED BY).*(?=STORED AS)":実際には、あなただけ.が、あまりにも改行にマッチしsubとTRE正規表現を使用することができ、

my_string="esrhjg erguhg rziughrtPARTITIONED BY hz\nueirghf zreeuifh iuehg reuhg riutghSTORED ASiugh oer hfz" 
p="(?s)(?<=PARTITIONED BY).*(?=STORED AS)" 
str_replace(my_string,p,"TO REPLACE") 

注意あなたがこの複雑な正規表現を必要としません。

my_string = "esrhjg erguhg rziughrtPARTITIONED BY hzueirghf zreeuifh iuehg reuhg riutghSTORED ASiugh oer hfz" 
sub("PARTITIONED BY.*STORED AS", "PARTITIONED BY -TO_REPLACE- STORED AS", my_string) 
## or with backreferences: 
sub("(PARTITIONED BY).*(STORED AS)", "\\1 -TO_REPLACE- \\2", my_string) 

this IDEONE demoを参照してください。

あなたは、文字列に置換するための複数のサブストリングを持っている場合は、.*.*?に置換されたパターンでstr_replace_allまたはgsubのいずれかが必要になります。

+1

すごく、ありがとう! –