我想知道为什么我使用gsub和stringi获得两个不同的输出字符串。是元字符"。"不包括stringi中的新行? stringi是否逐行读取""?
顺便说一句,我没有找到任何方法来执行"更正"用stringi替换所以我需要在这里使用gsub。
string <- "is it normal?\n\nhttp://www.20minutes.fr"
> gsub(" .*?http"," http", string)
[1] "is http://www.20minutes.fr"
> stri_replace_all_regex(string, " .*?http"," http")
[1] "is it normal?\n\nhttp://www.20minutes.fr"
答案 0 :(得分:2)
一种方法是将.
设置为也匹配行终止符,而不是停在一行:
stri_replace_all_regex(string, " .*?http"," http",
opts_regex = stri_opts_regex(dotall = TRUE))
答案 1 :(得分:2)
默认情况下 - 由于历史原因,请参阅this tutorial - 在大多数正则表达式引擎中,点与换行符不匹配。
正如@lukeA建议的那样,要匹配换行符,您可以在基于stringi regex的函数中将dotall
选项设置为TRUE
。
顺便说一句,gsub(..., perl=TRUE)
给出的结果与stringi一致。