我想从"/arsenal-vs-man-city/"
中提取"/sports/football/arsenal-vs-man-city/stats/"
。我不明白为什么我要尝试的东西不起作用。考虑到我在?
的两边都要求-vs-
做空,所以我不知道为什么我要走长路。这是代表:
library(stringr)
str_extract_all("/sports/football/arsenal-vs-man-city/stats/", "/.*?-vs-.*?/")
#> [[1]]
#> [1] "/sports/football/arsenal-vs-man-city/"
我想知道正确的方法是什么,以及为什么我的方法是错误的。
答案 0 :(得分:4)
您的正则表达式匹配第一个/
,然后匹配 any 0个或多个除换行符以外的其他字符,并且尽可能少,直到{{1 }},然后是除换行符以外的任何0个或多个字符,并尽可能少,直到最左边的-vs-
。
您需要“限制”第一个/
至少以匹配除.
以外的任何字符,并且您可以使用取反的方括号表示方法,例如:
/
请参见regex demo
详细信息
/[^/]*-vs-[^/]*/
-一个/
/
-除[^/]*
之外的0个或更多字符/
-文字子字符串-vs-
-除[^/]*
之外的0个或更多字符/
-一个/
。 R测试:
/