我试图只保留第一段字符(包括-和数字(之后、正斜杠之前的字符串。
我有以下字符串:
x <- c('/youtube.com/videos/cats', '/google.com/images/dogs', 'bbc.com/movies')
/youtube.com/videos/cats
/google.com/images/dogs
bbc.com/movies
所以它看起来像这个
/youtube.com/
/google.com/
bbc.com/
作为参考,我使用R 3.6
我尝试过正面的观察,我得到的最接近的是:^/[^/]*
感谢的任何帮助
因此,在bbc.com/movies
示例中,字符串不是以正斜杠开头的,但我仍然希望能够在匹配期间保留bbc.com
部分
您可以在此处使用sub
仅执行单个正则表达式替换:
sub('^(/?[^/]*/).*', '\1', x)
请参阅regex演示。
详细信息
^
-字符串的开头-(/?[^/]*/)
-捕获组1(替换模式中的1
(:可选的/
,然后是除/
之外的0个或更多个字符,然后是/
.*
-任何零个或多个字符,尽可能多
在线查看R测试:
test <- c("/youtube.com/videos/cats", "/google.com/images/dogs", "bbc.com/movies")
sub('^(/?[^/]*/).*', '\1', test)
# => [1] "/youtube.com/" "/google.com/" "bbc.com/"
第一个很棒的用户名。尝试一下,您可以利用str_extract只提取第一个匹配项这一事实。假设所有url都与letters.letters匹配,这个模式应该可以工作。如果你有数字,请告诉我。
library(stringr)
c("/youtube.com/videos/cats",
"/google.com/images/dogs",
"bbc.com/movies") %>%
str_extract(., "/?\w+\.\w+/")
产生
"/youtube.com/" "/google.com/" "bbc.com/"
使用基本R
gsub('(\/?.*\.com\/).*', '\1', x)
[1] "/youtube.com/" "/google.com/" "bbc.com/"
另一种选择是使用rebus包:
library(rebus)
library(stringi)
t <- c("/youtube.com/videos/cats"," /google.com/images/dogs"," bbc.com/movie")
pattern <- zero_or_more("/") %R% one_or_more(ALPHA) %R% DOT %R% one_or_more(ALPHA) %R% zero_or_more("/")
stringi::stri_extract_first_regex(t, pattern)
[1] "/youtube.com/" "/google.com/" "bbc.com/"