首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:删除字符串中定界符后的所有字母字符

R:删除字符串中定界符后的所有字母字符
EN

Stack Overflow用户
提问于 2017-10-16 18:25:03
回答 2查看 1.1K关注 0票数 1

我想删除字符串中分隔符后面的所有字母(a-z),例如:

代码语言:javascript
复制
s <- "abc-10abc"

所以为了得到:

代码语言:javascript
复制
> s2
[1] "abc-10"

我该怎么做?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-16 18:37:54

代码语言:javascript
复制
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()中,如果不是所有的情况都是小写的话:

代码语言:javascript
复制
gsub("(.*\\-\\d*)[a-z]*", "\\1", s, ignore.case = TRUE)
票数 3
EN

Stack Overflow用户

发布于 2017-10-16 18:55:44

我不是regex专家,但我相信这符合你的模式。

代码语言:javascript
复制
gsub("(^.*-[^[:alpha:]]*)[[:alpha:]]*", "\\1", s)
#[1] "abc-10"

解释:

  1. ^ -字符串的开头
  2. ^.*字符串开头的任何字符,后面跟着0或更多的重复。
  3. -与问题中的分隔符匹配。
  4. [^[:alpha:]]*圆周虫否定类[:alpha:],不匹配字母字符
  5. (all of above)形成一个模式组,第一个(也是唯一的)
  6. [[:alpha:]]*匹配字母字符,后面是零次或多次重复。

然后,在replacement参数中,\\1意味着用第一个组替换模式,因此[[:alpha:]]*部分被忽略了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46776784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档