【问题标题】:Use gsub remove all string before first numeric character使用 gsub 删除第一个数字字符之前的所有字符串
【发布时间】:2019-06-16 02:32:19
【问题描述】:

Use gsub remove all string before first white space in R

在此示例中,我们尝试删除带有sub(".*? (.+)", "\\1", D$name) 的空格之前的所有内容。我正在寻找非常相似的东西,但我对正则表达式并不熟悉。

我想删除第一个数字字符之前的所有内容,但不删除它

例如:

x <- c("lala65lolo","papa3hihi","george365meumeu")

我想要:

> "65lolo","3hihi", "365memeu"

【问题讨论】:

  • 试试sub("[^0-9]+", "", x)
  • @akrun 我不想让你删除你的答案。我只是想让你更加小心。如果输入字符串是“3dajdaj”,则您的解决方案不起作用,但可以轻松概括。就是这样。
  • 确实,我在考虑是否使用\\D+ 或 [^0-9]+`,但是在我发布答案后,发布了一个类似的答案。所以,我想保留它,然后你发表了评论。反正没关系
  • 对不起,经过反思,我的例子有点简单!不用担心,谢谢你的帮助,我有我的答案!

标签: r string gsub


【解决方案1】:

在 R 3.6(目前是 R devel 版本)以后,trimws 有一个新的 whitespace 参数,可用于指定被视为空白的内容——在本例中为任何非数字字符:

trimws(x, "left", "\\D")
## [1] "65lolo"    "3hihi"     "365meumeu"

【讨论】:

  • 请注意,此方法无法确保有数字。 trimws("abc", "left", "\\D") returns "" 但是如果有数字就可以了。
【解决方案2】:

你可以使用

> x <- c("lala65lolo","papa3hihi","george365meumeu")
> sub("^\\D+", "", x)
[1] "65lolo"    "3hihi"     "365meumeu"

或者,确保有一个数字:

sub("^\\D+(\\d)", "\\1", x)

模式匹配

  • ^ - 字符串开头
  • \\D+ - 一个或多个数字以外的字符
  • (\\d) - 捕获组 1:一个数字(替换模式中的 \1 恢复在该组中捕获的数字)。

以类似的方式,您可以实现以下目标:

  • sub("^\\s+", "", x) - 删除直到第一个非空白字符的所有文本
  • sub("^\\W+", "", x) - 删除直到第一个单词 char 的所有文本
  • sub("^[^-]+", "", x) - 删除直到第一个连字符(如果有的话)的所有文本,等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2018-07-08
    • 2020-03-11
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多