r-在正则表达式中最多保留第二个斜杠



我试图只保留第一段字符(包括-和数字(之后、正斜杠之前的字符串。

我有以下字符串:

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/"

相关内容

最新更新