Regex 在R中,单个字符始终位于向量字符串的末尾

Regex 在R中,单个字符始终位于向量字符串的末尾,regex,r,string,Regex,R,String,我有一个带字符串的向量,我想在R中处理它。 大概是这样的: c("sffssf/", "sfs/fs", "aaad") 我想确定的是,我总是在每个字符串的末尾有一个“/”,但有时它们在某个字符串(或其他地方)的末尾已经是一个“/” 我从stringr包中看到了stru sub, 我想如果最后一个字符是“/”的话,我可以有条件地删除它。 并始终添加“/”afterworths 我如何才能做到这一点,或者他们的方法更好吗?您并不需要stringr来实现这一点(尽管它可以工作),因为基本的R re

我有一个带字符串的向量,我想在R中处理它。 大概是这样的:

c("sffssf/", "sfs/fs", "aaad")
我想确定的是,我总是在每个字符串的末尾有一个“/”,但有时它们在某个字符串(或其他地方)的末尾已经是一个“/”

我从
stringr
包中看到了
stru sub
, 我想如果最后一个字符是“/”的话,我可以有条件地删除它。 并始终添加“/”afterworths


我如何才能做到这一点,或者他们的方法更好吗?

您并不需要
stringr
来实现这一点(尽管它可以工作),因为基本的R regex功能已经足够了。你真正需要的是

sub('/?$', '/', c("sffssf/", "sfs/fs", "aaad"))
## [1] "sffssf/" "sfs/fs/" "aaad/" 

sub
在第三个参数(向量)中查找第一个参数(模式),并将其替换为第二个参数(替换)。在这里,
“/?$”
告诉它查找
/
,如果它在那里(即0或1次)
,然后是行的末尾
$
。由于替换是一个
/
,因此它将取出一个位于行末尾的
/
(如果有),并添加一个
/
,以满足您的需要。

您并不需要
stringr
,因为基本的正则表达式功能已经足够了。你真正需要的是

sub('/?$', '/', c("sffssf/", "sfs/fs", "aaad"))
## [1] "sffssf/" "sfs/fs/" "aaad/" 

sub
在第三个参数(向量)中查找第一个参数(模式),并将其替换为第二个参数(替换)。在这里,
“/?$”
告诉它查找
/
,如果它在那里(即0或1次)
,然后是行的末尾
$
。由于替换是一个
/
,它将从
字符串中取出一个位于行末尾的
/
(如果有),并添加一个
/
,为您提供所需的内容。

我们可以使用
stru replace

library(stringr)
str_replace(v1, "/*$", "/")
#[1] "sffssf/" "sfs/fs/" "aaad/"  
数据
v1我们可以使用
stru替换
from
stringr

library(stringr)
str_replace(v1, "/*$", "/")
#[1] "sffssf/" "sfs/fs/" "aaad/"  
数据
v1
sub(“/?$”,“/”,c(“sffssf/”,“sfs/fs”,“aaad”))
@RichardScriven是的,注释:paste0(测试,ifelse(测试,nchar(测试),nchar(测试))!=“/”,“/”,“/”)工作正常,同时感谢:
sub(“/?$,“/”,c(“sffssfsfsf/”,“sfs/fs”,“aaad”))
@RichardScriven(测试,nchar(测试),nchar(测试))!=“/”,“/”,“/”)工作正常,还有sub,谢谢:)