我必须创建一个正则表达式,对于给定的字符串s,它将s的修剪版本捕获到组1.也就是说,对于任何字符串s,调用str_replace(s,re1,“\ 1”)应该产生与str_trim(s)相同的输出。这是我必须通过的测试用例。我不知道从哪里开始......
for (s in c(
" this will be trimmed ",
"\t\nso will this\n\t ",
"and this too "
)) {
stopifnot(identical(
str_replace(s, re6, "\\1"),
str_trim(s)))
}
我的正则表达式是re6 =“......” 谢谢!
答案 0 :(得分:1)
我们可以使用trimws
trimws(str1)
如果我们使用str_replace
library(stringr)
identical(str_replace_all(str1, "^\\s+|\\s+$", ""), str_trim(str1))
#[1] TRUE
此处使用的模式是一个或多个空格(\\s+
),从开头(^
)或(|
)开始($
)字符串并替换为空格(""
)
也可以作为一个组进行捕获,然后用反向引用替换它(在OP的帖子中尝试过)
re6 <- "^\\s*(.*\\S)\\s+$"
identical(str_trim(str1), str_replace(str1, re6, "\\1"))
#[1] TRUE
str1 <- c(
" this will be trimmed ",
"\t\nso will this\n\t ",
"and this too "
)
答案 1 :(得分:1)
使用带gsub
的正则表达式:
gsub("(^\\s+|\\s+$)", "", ss)
#[1] "this will be trimmed" "so will this" "and this too"
说明:\\s+
匹配>0
空格字符,位于字符串的开头(^
)或末尾($
)。
使用trimws
:
trimws(ss);
[1] "this will be trimmed" "so will this" "and this too"
ss <- c(
" this will be trimmed ",
"\t\nso will this\n\t ",
"and this too "
)