为什么星号通配符使用sub()命令失败?[r]

为什么星号通配符使用sub()命令失败?[r],r,replace,R,Replace,在R中使用sub()函数时,如何使用星号通配符替换指示符后面(或之前)的所有字符 如果要删除下划线和所有任意文本,请执行以下操作: x <- c("a_101", "a_275", "b_133", "b_277") 期望输出: "a" "a" "b" "b" 为什么通配符会失败?如果使用sub,则必须指定要替换的所有内容以及要替换的内容。在这里,我用一个组函数来表示感兴趣的字母 sub('([a-z])_\\d+', replacement = '\\1', x) [1] "a" "

在R中使用sub()函数时,如何使用星号通配符替换指示符后面(或之前)的所有字符

如果要删除下划线和所有任意文本,请执行以下操作:

x <- c("a_101", "a_275", "b_133", "b_277")
期望输出:

"a" "a" "b" "b"

为什么通配符会失败?

如果使用sub,则必须指定要替换的所有内容以及要替换的内容。在这里,我用一个组函数来表示感兴趣的字母

sub('([a-z])_\\d+', replacement = '\\1', x)
[1] "a" "a" "b" "b"
使用通配符也会奏效

sub('([a-z])_.*', replacement = '\\1', x)
[1] "a" "a" "b" "b"
最后,你的想法是:

sub('_.*', replacement = "", x)
[1] "a" "a" "b" "b"

*
不是您所指的通配符<代码>.*仅指任意数量的
.
字符(包括无字符)。您可能需要
.*
,其中
是一个通配符。我认为@AndrewGustar有解决方案。我想插入一个插件,让你测试正则表达式,看看它们到底在做什么,为什么你的代码甚至不删除一个
是因为
sub
查找
的第一个匹配项,结果是字符串开头的
为零
sub
只执行第一次替换,而
gsub
执行它所能找到的所有操作,并将删除
\uu
字符。@AndrewGustar谢谢!你的评论/回答正是我想要的。一个问题:你能澄清一下“
sub
只做第一次替换”的意思吗?在我未经训练的眼里,它是零替换的。根据我对“第一次替换”的理解,我希望得到这样的输出:“a101”“a_275”“b_133”“b_277”
sub
对一个空字符串进行一次零长度序列的替换。它对向量的每个元素都这样做。这当然可以归结为什么!
sub('_.*', replacement = "", x)
[1] "a" "a" "b" "b"