【问题标题】:Understanding `regexp` in R [duplicate]了解 R 中的 `regexp` [重复]
【发布时间】:2014-04-16 14:21:10
【问题描述】:

理解正则表达式有时会很麻烦。特别是如果你不是很熟悉写它们,比如我自己。

R 中有几个我想了解并能够使用的内置函数(base 包)。喜欢:

grepgsub,将(p, x) 作为参数,其中p 是一个模式,x 是一个要查找的字符向量。 split 函数也像许多其他函数一样将 regexp 作为参数。

反正我有一个例子,比如:

string <- "39 22' 19'' N"

我需要能够从中提取数字。因此,使用这些stringriteratorsforeach 库我试图找出使用iterforeach 的表达式。

str_locate(string, "[0-9]+") 定位,z &lt;- str_extract(obj, "[0-9]+") 仅提取我的字符串中的第一个匹配项。

我尝试过制作类似的东西

x <- iter(z)
nextElem(x)

但它不起作用。还有一个通常不起作用的。

a <- foreach(iter(z))
a

我应该如何使用上述库来解决这个问题?

谢谢。

【问题讨论】:

  • @devnull 是的,你可能是对的
  • 我认为你需要在string的定义中加上引号
  • @Dason 已修复,感谢您的观察

标签: regex string r foreach iteration


【解决方案1】:

查看http://cran.r-project.org/web/packages/stringr/stringr.pdf

str_extract_all(your_string, "[0-9]+")

【讨论】:

    【解决方案2】:

    基本功能的结果完全相同:

    strsplit(gsub("(\\D+)"," ", string), " ")
    

    【讨论】:

      【解决方案3】:

      这是在基础 R 中执行此操作的另一种方法:

      string <- "39 22' 19'' N"
      regmatches(string,gregexpr("[0-9]+",string))
      # [[1]]
      # [1] "39" "22" "19"
      

      请注意,regmatches(...) 返回一个列表,其中每个元素都是带有匹配项的字符向量。因此,要获得您将使用的 char 向量:

      regmatches(string,gregexpr("[0-9]+",string))[[1]]
      # [1] "39" "22" "19"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        • 1970-01-01
        • 2017-01-07
        • 2014-07-26
        • 2013-01-07
        • 1970-01-01
        • 2011-11-25
        相关资源
        最近更新 更多