我的字符串看起来像下面显示的a
。我需要提取第一个//
和第一个后续/
之间的部分字符串。我使用sub
与perl = F
,但它大约比perl = T
慢4倍。所以我试着perl = T
,发现搜索从字符串的END开始?R子与Perl - 开始向后搜索?
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
你知道包'urltools'吗?在这些任务中派上用场 – Sotos
对于TRE正则表达式,将惰性量词与贪婪的量词混合并不是一个好主意。在某些情况下,他们按预期工作,而在其他情况下,他们不会。在这种情况下使用'perl = TRUE',并且要记住'。*'尽可能匹配尽可能多的字符,'。*?'匹配尽可能少的字符,但'perl = TRUE',不符合换行符号。如果你需要,在模式开始处添加'(?s)'。 –