【问题标题】:Return numbers between brackets返回括号之间的数字
【发布时间】:2013-09-02 17:09:36
【问题描述】:

我是一名休闲程序员,没有接受过正则表达式培训,所以我正在努力解决这个问题。我在这里找到了一个例子:

Is there an efficient way of returning a sub-section of a text string

其中 gsub 用于提取两个句点之间的数字。我需要做同样的事情,但是我正在寻找方括号之间的数字,就像在 tmpstr1 中一样。有人可以帮我理解 gsub 示例中的正则表达式,以便我可以修改它并让它工作吗?基本上,一个人如何阅读英文的正则表达式部分才有意义?我只是不明白。

谢谢

set.seed(1)
n <- 50
let1 <- LETTERS[runif(n, min=1, max=26)]
num <- round(runif(100, min=1, max=100))
let2 <- c(LETTERS[runif(n, min=1, max=26)], LETTERS[runif(n, min=1, max=26)])
tmpstr <- paste(let1, num, let2, sep=".")
tmpstr

gsub('.*[.](.*)[.].*','\\1',tmpstr)

tmpstr1 <- paste0(let1, "[", num, "]", let2)
tmpstr1

【问题讨论】:

  • 这也将点替换为 [ ] 并且只涉及固定字符串:sub(".", "]", sub(".", "[", tmpstr, fixed = TRUE), fixed = TRUE)`

标签: r


【解决方案1】:

发布问题后,我发现了一个似乎可行的示例:

gsub('.+\\[([0-9]+)\\].+?$', '\\1', tmpstr1)

【讨论】:

    【解决方案2】:

    LGTrader 的答案更适合那些想要学习正则表达式的人(我的投票在那里),但这是给那些不想学习正则表达式的人:

    library(qdap)
    x <- bracketXtract(tmpstr1, "square")
    unname(unlist(x))
    
    ## > unname(unlist(bracketXtract(tmpstr1, "square")))
    ##   [1] "48" "86" "44" "25" "8"  "11" "32" "52" "67" "41" "91" "30" "46" "34" "65"
    ##  [16] "27" "48" "77" "9"  "88" "35" "84" "35" "34" "48" "89" "87" "40" "78" "96"
    ##  [31] "44" "72" "41" "33" "76" "21" "71" "13" "25" "15" "25" "7"  "65" "88" "78"
    ##  [46] "80" "46" "42" "81" "61" "66" "36" "28" "99" "64" "22" "14" "48" "92" "60"
    ##  [61] "98" "73" "36" "44" "16" "2"  "72" "11" "45" "64" "99" "50" "49" "18" "76"
    ##  [76] "46" "52" "22" "24" "60" "58" "9"  "5"  "65" "93" "60" "57" "53" "99" "51"
    ##  [91] "69" "61" "25" "27" "73" "46" "18" "75" "11" "87"
    

    【讨论】:

    • 你可以稍微清理一下 - 不清楚为什么你定义 x 然后在下一行完全忽略它。
    最近更新 更多