我有一个名称向量,其中一些名称具有前导和尾随.
字符,有些则没有。这是一个例子:
test <- c('.name.1.','name.2','.name.3.')
我想有条件地删除这些名称中的前导和尾随.
字符,以便返回
c('name.1','name.2','name.3')
答案 0 :(得分:11)
使用正则表达式:
test <- c('.name.1.','name.2','.name.3.')
gsub('^\\.|\\.$', '', test)
# [1] "name.1" "name.2" "name.3"
正则表达式中的两个反斜杠\\
会转义点.
,这实际上意味着任何字符。插入符号^
标记字符串的开头,美元,$
,字符串的结尾。 |
是一个逻辑&#34;或&#34;。因此,本质上,正则表达式匹配字符串开头的点或字符串末尾的点,并用空字符串替换它。
答案 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_all
(stringr
- 相当于gsub
):
str_replace_all(test, "[.](.+)[.]", "\\1")
# [1] "name.1" "name.2" "name.3"
答案 3 :(得分:2)
只是为了好玩,这是一个substring
和grepl
的方法。
substring(test, 1L + grepl("^\\.", test), nchar(test) - grepl("\\.$", test))
[1] "name.1" "name.2" "name.3"
这可以用substring
替换substr
。关于这些函数的一个很酷的事情是它们为第二个和第三个参数采用向量。在这里,我们可以使用grepl
在第二个参数的1L和2L之间以及最终字符的位置和倒数第二个字符之间递增。