使用stringi和gsub的不同输出(在同一个字符串上使用相同的模式)

时间:2015-04-15 09:37:49

标签: r gsub stringi

我想知道为什么我使用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"

2 个答案:

答案 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一致。