gsub返回\ n(换行符)
问题描述:
我有这种行为的正则表达式,我无法解释。我的目标是但当我的字符串包含\n
一些前面加上了@
后解析只有文字,gsub
也\n
解析:gsub返回 n(换行符)
string <- "[email protected] something \n"
gsub("^\\[email protected]([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\\1", string, perl=T);
# [1] "address\n"
string <- "[email protected] \n"
gsub("^\\[email protected]([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("^\\[email protected]([a-z0-9_]{1,15})[^a-z0-9_]+.*$", "\\1", string, perl = FALSE)
# [1] "address"
答
要提取address
,你也可以使用:
library(stringr)
str_extract(string, perl('(?<[email protected])[a-z0-9_]+(?=)'))
#[1] "address"
你可以做点到甚至可以通过在第一次添加's'修饰符来匹配甚至是新行字符。尝试'grepl(“(?s)。”,“\ n”,perl = TRUE)' –
好主意! @AvinashRaj –