使用R正则表达式拆分域和路径
我有一个包含URL的数据集,我想使用正则表达式拆分它。我已经创建了一个我相信有效的正则表达式,但是我不确定如何在R中实现它 这是我的正则表达式:使用R正则表达式拆分域和路径,r,R,我有一个包含URL的数据集,我想使用正则表达式拆分它。我已经创建了一个我相信有效的正则表达式,但是我不确定如何在R中实现它 这是我的正则表达式: - Domain: ^(.*[\\\/]) - Path: (\/[0-9].*\?|$) #库 库(tidyr)#函数分离、提取 # 1. 读取数据 df=read.csv2(text=“datetime | url 2021-05-29 16:57:09|https://stackoverflow.com/questions/67755241
- Domain: ^(.*[\\\/])
- Path: (\/[0-9].*\?|$)
#库
库(tidyr)#函数分离、提取
# 1. 读取数据
df=read.csv2(text=“datetime | url
2021-05-29 16:57:09|https://stackoverflow.com/questions/67755241/how-do-i-put-row-data-from-a-database-into-a-php-variable
2021-05-29 16:58:09|https://stackoverflow.com/
2021-05-29 16:59:09|https://stackoverflow.com/hacker
2021-05-29 17:00:09|https://stackoverflow.com/jobs?so_medium=StackOverflow&so_source=SiteNav
2021-05-29 17:01:09|http://www.bbc.co.uk/
2021-05-29 17:02:09|http://www.bbc.com/weather/2643743?day=3",
sep=“|”,stringsAsFactors=F,na.strings=“未知”);
# 2. 将URL拆分为域和路径
#域:^(.[\\/]))
#路径:(\/[0-9].\?|$)
df%提取(url,c(“域”,“路径”),“^(.[\\\\/])(\\/[0-9].\\\?\$)”)
df
这将产生以下结果:
## datetime Domain Path
## 1 2021-05-29 16:57:09 <NA> <NA>
## 2 2021-05-29 16:58:09 https://stackoverflow.com/
## 3 2021-05-29 16:59:09 <NA> <NA>
## 4 2021-05-29 17:00:09 <NA> <NA>
## 5 2021-05-29 17:01:09 http://www.bbc.co.uk/
## 6 2021-05-29 17:02:09 <NA> <NA>
##日期时域路径
## 1 2021-05-29 16:57:09
## 2 2021-05-29 16:58:09 https://stackoverflow.com/
## 3 2021-05-29 16:59:09
## 4 2021-05-29 17:00:09
## 5 2021-05-29 17:01:09 http://www.bbc.co.uk/
## 6 2021-05-29 17:02:09
您可以使用以下正则表达式-
tidyr::extract(df, url, c('Domain', 'path'), '(https?://.*?/)(.*)')
# datetime Domain
#1 2021-05-29 16:57:09 https://stackoverflow.com/
#2 2021-05-29 16:58:09 https://stackoverflow.com/
#3 2021-05-29 16:59:09 https://stackoverflow.com/
#4 2021-05-29 17:00:09 https://stackoverflow.com/
#5 2021-05-29 17:01:09 http://www.bbc.co.uk/
#6 2021-05-29 17:02:09 http://www.bbc.com/
path
#1 questions/67755241/how-do-i-put-row-data-from-a-database-into-a-php-variable
#2
#3 hacker
#4 jobs?so_medium=StackOverflow&so_source=SiteNav
#5
#6 weather/2643743?day=3
相同的正则表达式可用于基本Rstrcapture
-
strcapture('(https?://.*?/)(.*)', df$url,
proto = list(Domain = character(), path = character()))
您可以使用以下正则表达式-
tidyr::extract(df, url, c('Domain', 'path'), '(https?://.*?/)(.*)')
# datetime Domain
#1 2021-05-29 16:57:09 https://stackoverflow.com/
#2 2021-05-29 16:58:09 https://stackoverflow.com/
#3 2021-05-29 16:59:09 https://stackoverflow.com/
#4 2021-05-29 17:00:09 https://stackoverflow.com/
#5 2021-05-29 17:01:09 http://www.bbc.co.uk/
#6 2021-05-29 17:02:09 http://www.bbc.com/
path
#1 questions/67755241/how-do-i-put-row-data-from-a-database-into-a-php-variable
#2
#3 hacker
#4 jobs?so_medium=StackOverflow&so_source=SiteNav
#5
#6 weather/2643743?day=3
相同的正则表达式可用于基本Rstrcapture
-
strcapture('(https?://.*?/)(.*)', df$url,
proto = list(Domain = character(), path = character()))
- 第一个捕获组
捕获从开始到两个//然后//以及直到/然后/仅一个的所有内容^([^//]*/[^/]*/{1})
- 第二个捕获组捕获到结束前剩余的所有内容
- 第一个捕获组
捕获从开始到两个//然后//以及直到/然后/仅一个的所有内容^([^//]*/[^/]*/{1})
- 第二个捕获组捕获到结束前剩余的所有内容
谢谢,成功了!如果站点使用http://而不是https://怎么办?可以修改为同时使用http://和https://吗?可以,请参阅更新的答案。谢谢,这很有效!如果站点使用http://而不是https://怎么办?是否可以修改为同时使用http://和https://?是的,请参阅更新的答案。如图所示,
httr
包将为您完成繁重的任务。重新发明轮子没有意义。如图所示,httr
包将为您完成繁重的lfting。没有必要重新发明轮子。