带有perl的R sub - 开始向后搜索?

时间:2016-11-11 19:37:29

标签: r regex gsub

我的字符串看起来像a,如下所示。我需要提取 first //和第一个后续/之间的部分字符串。我将subperl = F一起使用,但它比perl = T慢大约4倍。所以我尝试perl = T并发现搜索从字符串的结尾开始??

    a = "https://moo.com/meh/woof//A.ds.serving/hgtht//ghhg/tjtke"
    print(gsub(".*//(.*?)/.*","\\1",a))

    "moo.com"

    print(gsub(".*//(.*?)/.*","\\1",a,perl=T))

    "ghhg"
我需要

moo.com。我很惊讶地看到这个 - 它是在某处记录的吗?如何用perl重写它 - 我有20M行可以使用,速度很重要。谢谢!

编辑:没有给出每个字符串都以http

开头

1 个答案:

答案 0 :(得分:1)

您也可以尝试.*?//(.*?)/.*使第一个.*懒惰,以便//与第一个//实例匹配:

gsub(".*?//(.*?)/.*","\\1",a,perl=T)
# [1] "moo.com"

?gsub说:

  

据报道标准正则表达式代码非常慢   当应用于极长的字符串(数万个   字符或更多):perl = TRUE时使用的代码似乎要快得多   这种用法更可靠。

     

gsub的标准版本无法正确重复替换   单词边界(例如pattern =" \ b")。使用perl = TRUE   匹配。