使用 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"
只会让您看到第一条斜线和第二条斜线之间的内容...但这似乎就是您想要的。
我有一个带有一些 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"
只会让您看到第一条斜线和第二条斜线之间的内容...但这似乎就是您想要的。