作者love11098787 (sunny_girl)
看板R_Language
标题[问题] 网址撷取特定字串
时间Sat Nov 21 01:19:22 2020
[问题类型]:
程式谘询
[软体熟悉度]:
入门
[问题叙述]:
https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.abc.com.tw%2Fday%2F1234%3Futm_source%3Dfacebook-abc%26utm_medium%3Dpost%26utm_campaign%3Dday%26utm_content%3Dlink-202010-happy%2F1234&h=AT0QK64y8zcRN3Of6strNOOhm2lESra4yGyR73iofDkVvVIYkPTmiVHee6RsQlfU1-delepwkeworiewj0rw2142_jifdks22313
1.想要撷取 %3Dlink 後面的 202010-happy
2.想要撷取 %2F 後面的 1234
试过用很原始的方式strsplit(),但切出来的东西与想像的不符合
想询问各位R大神有没有其他建议的语法QQ
by对於正规式表达还是很不熟悉的R入门菜鸟
[关键字]:
特定字串撷取
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.49.216 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1605892764.A.66D.html
1F:推 Gjerry: 可以试试看用 % 符号来切割字串,再找你要的字串片段。另 11/21 03:31
2F:→ Gjerry: 外可以试着去查 regular expression ,以及grep 等 funct 11/21 03:31
3F:→ Gjerry: ions,或是 stringr package 的用法 11/21 03:31
4F:推 cywhale: y <-regexpr('%3Dlink-(?:[a-zA-Z0-9\\-]+)%2F[0-9]+',x) 11/21 19:38
5F:→ cywhale: y值156 你打y还会显示attr(,"match.length") 27 11/21 19:39
6F:→ cywhale: 或者attributes(y)$match.length得到27 总长度 另外这里 11/21 19:40
7F:→ cywhale: 用了两个'饰词't1<-nchar('%3Dlink-')为8 %2F为3设给t2 11/21 19:43
8F:→ cywhale: 啊要分两次t<-regexpr('%3Dlink-(?:[a-zA-Z0-9\\-]+)%',x 11/21 19:48
9F:→ cywhale: substr(x, t+t1, t+attributes(t)$match.length-2)会得到 11/21 19:51
10F:→ cywhale: "202010-happy" 一样抓它的长度t3<-nchar(...) 得到12 11/21 19:53
11F:→ cywhale: substr(x, y+attributes(t)$match.length+nchar(t2)+1, 11/21 19:56
12F:→ cywhale: y+attributes(y)$match.length-1) 就会抓到'1234' 11/21 19:57
13F:→ cywhale: 抱歉一边写用不到t3但要分两次,或抓一次用%2F做strsplit 11/21 20:00
14F:推 chuubbyy: str1 <- str_extract(string, '(?<=%3Dlink-).+(?=%2F)' 11/22 00:30
15F:→ chuubbyy: ) 11/22 00:30
16F:→ chuubbyy: str2 <- str_extract(string, paste0('(?<=', str1, '%2 11/22 00:30
17F:→ chuubbyy: F).+(?=&)')) 11/22 00:30