使用R语言stringr包提取URL中utm_source值的正则问题
解决方法
问题出在你用的.*是贪婪匹配,它会从utm_source=后面一直匹配到URL中最后一个&的位置,所以才会带上后面的参数内容。可以用以下两种方式修正:
方案1:使用非贪婪匹配
把正则里的.*改成.*?,让匹配在遇到第一个&时就停止:
library(stringr) urls <- c( "http://www.google.com?utm_source=site_corriere&utm_medium=video&utm_content=box", "http://www.google.com?utm_source=site_rep&utm_medium=display&utm_content=box", "http://www.google.com?utm_source=site_fattoquotidiano&utm_medium=social&utm_content=box", "http://www.google.com?utm_source=site_inter&utm_medium=video&utm_content=box", "http://www.google.com?utm_source=site_foglio&utm_medium=video&utm_content=box" ) result <- str_extract(urls, "(?<=utm_source=).*?(?=&)") print(result)
方案2:使用精准字符匹配(推荐)
因为utm_source的取值里不会包含&,可以直接匹配所有非&的字符,这种方式效率更高:
result <- str_extract(urls, "(?<=utm_source=)[^&]+") print(result)
两种方案运行后都会得到你期望的结果:[1] "site_corriere" "site_rep" "site_fattoquotidiano" "site_inter" "site_foglio"
内容的提问来源于stack exchange,提问作者paolotroia
相关产品推荐
相关产品推荐

