Gsub返回 (换行符)



我有这种regex的行为,我无法解释。我的目标是只解析@之后的文本,但是当我的字符串包含n之前有一些单词时,gsub也解析n:

string <- ".@address something n"
gsub("^\.?@([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\1", string, perl=T);
# [1] "addressn"
string <- ".@address n"
gsub("^\.?@([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\1", string, perl=T);
# [1] "address"

在perl兼容的正则表达式中.不匹配n。这与"普通"正则表达式形成对比。看一下这个例子:

grepl(".", "n", perl = FALSE)
# [1] TRUE
grepl(".", "n", perl = TRUE)
# [1] FALSE

如果您指定perl = FALSE:

,您的代码将工作
gsub("^\.?@([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\1", string, perl = FALSE)
# [1] "address"

要提取address,还可以使用:

library(stringr)
 str_extract(string, perl('(?<=@)[a-z0-9_]+(?= )'))
#[1] "address"

相关内容

  • 没有找到相关文章

最新更新