有条件地删除R中的前导或尾随`.`字符

时间:2017-10-10 16:41:18

标签: r regex

我有一个名称向量,其中一些名称具有前导和尾随.字符,有些则没有。这是一个例子:

test <- c('.name.1.','name.2','.name.3.')

我想有条件地删除这些名称中的前导和尾随.字符,以便返回

c('name.1','name.2','name.3')

4 个答案:

答案 0 :(得分:11)

使用正则表达式:

test <- c('.name.1.','name.2','.name.3.')
gsub('^\\.|\\.$', '', test)
# [1] "name.1" "name.2" "name.3"

正则表达式中的两个反斜杠\\会转义点.,这实际上意味着任何字符。插入符号^标记字符串的开头,美元,$,字符串的结尾。 |是一个逻辑&#34;或&#34;。因此,本质上,正则表达式匹配字符串开头的点或字符串末尾的点,并用空字符串替换它。

有关正则表达式的更多信息,请参见here以及有关gsub和相关函数here的信息。

答案 1 :(得分:2)

使用substr功能的快速功能:

fun1 <- function(x) substr(x, 1 + (1 * as.numeric(substr(x,1,1)=='.')), nchar(x) - (1 * as.numeric(substr(x, nchar(x), nchar(x)) == '.')))

我们使用substr检查字符串的第一个和最后一个元素中的.,然后我们再次使用substr来提取文本的某些部分。例如,如果第一个字符中有.,但第二个字符中没有substr(text, 2, nchar(text)),我们将提取:fun1(test) [1] "name.1" "name.2" "name.3"

nullptr

答案 2 :(得分:2)

您还可以使用str_extract中的stringr

library(stringr)

str_extract(test, "\\w+\\.\\d")

str_replace_allstringr - 相当于gsub):

str_replace_all(test, "[.](.+)[.]", "\\1")

# [1] "name.1" "name.2" "name.3"

答案 3 :(得分:2)

只是为了好玩,这是一个substringgrepl的方法。

substring(test, 1L + grepl("^\\.", test), nchar(test) - grepl("\\.$", test))
[1] "name.1" "name.2" "name.3"

这可以用substring替换substr。关于这些函数的一个很酷的事情是它们为第二个和第三个参数采用向量。在这里,我们可以使用grepl在第二个参数的1L和2L之间以及最终字符的位置和倒数第二个字符之间递增。