正则表达和修剪

时间:2018-03-14 05:14:35

标签: r regex

我必须创建一个正则表达式,对于给定的字符串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 =“......” 谢谢!

2 个答案:

答案 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)

方法1

使用带gsub的正则表达式:

gsub("(^\\s+|\\s+$)", "", ss)
#[1] "this will  be trimmed" "so will this"          "and this too"

说明:\\s+匹配>0空格字符,位于字符串的开头(^)或末尾($)。

方法2

使用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    "
)