R正则表达式捕获组?
我有很多这样的字符串:R正则表达式捕获组?,r,regex,string,R,Regex,String,我有很多这样的字符串: 2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0 我想提取位于最后一个“/”之后并以结尾的子字符串: 我已经找到了如何提取:/01/01/07/556662 通过使用以下正则表达式:(\/)(.*)(=\\\) 请告知如何捕获正确的组。您可以使用捕获组: /([^_/]+)_[^/\s]* 解释 /逐字匹配 ([^/]+)在不匹配下划线或正斜杠的组中捕获 \u[^/\ s]*匹配\u,然后0+次不是正
2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0
我想提取位于最后一个“/”
之后并以结尾的子字符串:
我已经找到了如何提取:/01/01/07/556662
通过使用以下正则表达式:(\/)(.*)(=\\\)
请告知如何捕获正确的组。您可以使用捕获组:
/([^_/]+)_[^/\s]*
解释
/
逐字匹配
([^/]+)
在不匹配下划线或正斜杠的组中捕获
\u[^/\ s]*
匹配\u
,然后0+次不是正斜杠或空白字符
|
获取捕获组的一个选项可能是使用str_match获取第二列:
library(stringr)
str = c("2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0")
str_match(str, "/([^_/]+)_[^/\\s]*")[,2]
# [1] "556662"
你可以用
x <- "2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0"
regmatches(x, regexpr(".*/\\K[^_]+", x, perl=TRUE))
## [1] "556662"
library(stringi)
stri_match_last_regex("2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0", ".*/([^_]+)")[,2]
## [1] "556662"
看
在这里,它与前一个类似,但是除了\uuu
之外的1个或多个字符被捕获到组1中(\1
在替换模式中),并且尾部的*
确保整个输入匹配(并且已消耗,准备替换)
替代非基本R解决方案
如果您负担得起或更愿意使用stringi
,您可以使用
x <- "2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0"
regmatches(x, regexpr(".*/\\K[^_]+", x, perl=TRUE))
## [1] "556662"
library(stringi)
stri_match_last_regex("2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0", ".*/([^_]+)")[,2]
## [1] "556662"
这将匹配到最后一个/
的字符串,并将捕获到组1(您使用[,2]
在第2列中访问该组)1个或多个字符,而不是\uu
或
stri_extract_u last_regex(“2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0”)(I根据Wiktor Stribiżew的代码更改了regex规则
x <- "2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0"
regmatches(x, regexpr(".*/([0-9]+)", x, perl=TRUE))
sub(".*/([0-9]+).*", "\\1", x)
x这不是我需要的,我想提取第一个捕获组中位于最后/和之前的任何内容。我已经更新了我的答案。但是在位于最后/和之前的子字符串之后我不需要任何内容。我如何提取我需要的唯一部分。非常简单,直截了当注意!谢谢Wiktor!!!@Wiktor-stribizew@SteveS我还添加了非base R正则表达式解决方案。请注意,OP在帖子中没有提到,在最后一个/
之后和下一个\u
之前,应该只有数字。
x <- "2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0"
regmatches(x, regexpr(".*/([0-9]+)", x, perl=TRUE))
sub(".*/([0-9]+).*", "\\1", x)