我有正则表达式的这种行为,我无法解释。我的目标是仅在@
之后解析文本,但当我的字符串包含\n
前面有一些单词时,gsub
也会解析\n
:
string <- ".@address something \n"
gsub("^\\.?@([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\\1", string, perl=T);
# [1] "address\n"
string <- ".@address \n"
gsub("^\\.?@([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\\1", string, perl=T);
# [1] "address"
答案 0 :(得分:3)
与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"
答案 1 :(得分:0)
要提取address
,您还可以使用:
library(stringr)
str_extract(string, perl('(?<=@)[a-z0-9_]+(?= )'))
#[1] "address"