正则表达式,匹配包含换行符的字符串,并在 R 中环顾 str_replace
regex, match string which contains linebreak with lookaroud str_replace in R
我在 R 的 stringr 包中使用 str_replace 函数。我想替换 PARTITIONED BY 和 STORED AS 之间的子字符串
这些命令有效
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")
那些命令没有(我加了一个\n)
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")
如果 "between" 字符串包含换行符 \n,如何使 str_replace 工作?
在所有 stringr
函数中使用的 ICU 正则表达式风格中,点匹配任何字符 但换行符 .
您可以使用内联 (?s)
修饰符 - "(?s)(?<=PARTITIONED BY).*(?=STORED AS)"
:
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")
请注意,您不需要这个复杂的正则表达式,实际上,您可以将 TRE 正则表达式与 sub
一起使用,其中 .
也匹配换行符:
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)
如果您在一个字符串中有多个子字符串要替换,您将需要 str_replace_all
或 gsub
中的一个模式,其中 .*
替换为 .*?
。
我在 R 的 stringr 包中使用 str_replace 函数。我想替换 PARTITIONED BY 和 STORED AS 之间的子字符串
这些命令有效
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")
那些命令没有(我加了一个\n)
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")
如果 "between" 字符串包含换行符 \n,如何使 str_replace 工作?
在所有 stringr
函数中使用的 ICU 正则表达式风格中,点匹配任何字符 但换行符 .
您可以使用内联 (?s)
修饰符 - "(?s)(?<=PARTITIONED BY).*(?=STORED AS)"
:
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")
请注意,您不需要这个复杂的正则表达式,实际上,您可以将 TRE 正则表达式与 sub
一起使用,其中 .
也匹配换行符:
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)
如果您在一个字符串中有多个子字符串要替换,您将需要 str_replace_all
或 gsub
中的一个模式,其中 .*
替换为 .*?
。