我想删除字符串中分隔符后面的所有字母(a-z),例如:
s <- "abc-10abc"所以为了得到:
> s2
[1] "abc-10"我该怎么做?谢谢
发布于 2017-10-16 18:37:54
gsub("(.*\\d).*", "\\1", s)第一个模式参数使用()“捕获”一组字符。在捕获,我们正在寻找所有的外卡字符,直到一个数字的\\d。这个“捕捉”所有的东西,直到这里的最后一个数字。
由于模式参数还包括捕获组之后的多个通配符,所以整个原始字符串将被指定为替换对象。替换参数\\1说要使用第一个(在本例中仅限于)捕获模式参数中的表达式。
如果不清楚,请告诉我,这是我对R regex help https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/的regex福音
正如Rich指出的那样,您可以用.*替换[a-z]*,只针对最后一个数字后面的字母和z。您可能也希望将参数ignore.case = TRUE添加到gsub()中,如果不是所有的情况都是小写的话:
gsub("(.*\\-\\d*)[a-z]*", "\\1", s, ignore.case = TRUE)发布于 2017-10-16 18:55:44
我不是regex专家,但我相信这符合你的模式。
gsub("(^.*-[^[:alpha:]]*)[[:alpha:]]*", "\\1", s)
#[1] "abc-10"解释:
^ -字符串的开头^.*字符串开头的任何字符,后面跟着0或更多的重复。-与问题中的分隔符匹配。[^[:alpha:]]*圆周虫否定类[:alpha:],不匹配字母字符(all of above)形成一个模式组,第一个(也是唯一的)[[:alpha:]]*匹配字母字符,后面是零次或多次重复。然后,在replacement参数中,\\1意味着用第一个组替换模式,因此[[:alpha:]]*部分被忽略了。
https://stackoverflow.com/questions/46776784
复制相似问题