使用 stringr 和正则表达式在 URL 中查找模式

Find pattern in URL with stringr and regex

我有一个带有一些 url 的数据框 df。我想用 stringr 和 str_extract

提取的 URL 中的斜杠内有子类别

我的数据看起来像

Text         URL
Hello        www.facebook.com/group1/bla/exy/1234
Test         www.facebook.com/group2/fssas/eda/1234
Text         www.facebook.com/group-sdja/sdsds/adeds/23234
Texter       www.facebook.com/blablabla/sdksds/sdsad

我现在想提取 .com/ 和下一个 /

之后的所有内容

我试过了suburlpattern <- "^.com//{1,20}//$"df$categories <- str_extract(df$URL, suburlpattern)

但我在 df$categories 中只得到 NA

知道我在这里做错了什么吗?这是我的正则表达式代码吗?

非常感谢任何帮助!非常感谢。

这将 return 第一组正斜杠之间的所有内容

library(stringr)
str_match("www.facebook.com/blablabla/sdksds/sdsad", "^[^/]+/(.+?)/")[2]

[1] "blablabla"

如果你想使用 str_extract,你需要一个正则表达式来获取你需要的值到整个匹配中,你还需要一个 (?<=[.]com/) 回顾:

(?<=[.]com/)[^/]+

参见regex demo

详情:

  • (?<=[.]com/) - 当前位置前面必须有 .com/ 子字符串
  • [^/]+ - 匹配 /.
  • 以外的 1 个或多个字符

R 演示:

> URL = c("www.facebook.com/group1/bla/exy/1234", "www.facebook.com/group2/fssas/eda/1234","www.facebook.com/group-sdja/sdsds/adeds/23234", "www.facebook.com/blablabla/sdksds/sdsad")
> df <- data.frame(URL)
> library(stringr)
> res <- str_extract(df$URL, "(?<=[.]com/)[^/]+")
> res
[1] "group1"     "group2"     "group-sdja" "blablabla"

这个有效

library(stringr)
data <- c("www.facebook.com/group1/bla/exy/1234", 
          "www.facebook.com/group2/fssas/eda/1234",
          "www.facebook.com/group-sdja/sdsds/adeds/23234",
          "www.facebook.com/blablabla/sdksds/sdsad")

suburlpattern <- "/(.*?)/" 
categories <- str_extract(data, suburlpattern)
str_sub(categories, start = 2, end = -2)

结果:

[1] "group1" "group2" "group-sdja" "blablabla"

只会让您看到第一条斜线和第二条斜线之间的内容...但这似乎就是您想要的。