【问题标题】:How could I pick the string by gsub?我如何通过 gsub 选择字符串?
【发布时间】:2016-05-11 03:11:29
【问题描述】:

我有这样的字符串:

df
[1] "XID\t5647: asasaasa" "XID\t1540"  

如何使用 gsub 只选择 "XID\t" 之后的数字? 我使用 gsub 如下:

gsub(".*XID\t(.*)\\:.*", "\\1", df)
>[1] "5647"     "XID\t1540"

gsub(".*XID\t(.*)", "\\1", df)
>[1] "5647: asasaasa" "1540" 

但我希望它是这样的:

[1] "5647" "1540" 

我认为案例是重叠的,所以我必须使用 gsub 两次,以便我可以随意选择它们。请给我你的想法,谢谢。

【问题讨论】:

  • 除了XID\t后面的数字以外,你有没有其他模式

标签: r gsub


【解决方案1】:

我们可以使用str_extract来匹配数字部分(\\d+

library(stringr)
str_extract(df, "\\d+")
#[1] "5647" "1540"

或用gsub 匹配所有非数字(\\D+)并将其替换为""

gsub("\\D+", "", df)
#[1] "5647" "1540"

或者使用 OP 的语法来匹配“XID\t”之后的一个或多个数字 (\\d+),将其捕获为一个组 ((...)) 并将其替换为反向引用 (\\1)。

sub(".*XID\t(\\d+).*", "\\1", df)
#[1] "5647" "1540"

数据

df <- c("XID\t5647: asasaasa", "XID\t1540" )

【讨论】:

    【解决方案2】:

    只要用“”替换任何不是数字的东西

    x=c("XID\t5647: asasaasa", "XID\t1540" )
    gsub("[^0-9]","",x)
    #[1] "5647" "1540"
    

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 2022-08-17
      • 2020-11-19
      • 2022-11-15
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多