【发布时间】:2022-12-13 02:58:50
【问题描述】:
除非我忽略了某些东西,否则我找不到以下问题的解决方案。
如果我有以下单元素向量:
c("133 45123; 4514;25")
我怎样才能找到这个元素中有“;”的位置?和“”,这样我就可以使用 substr 获得:
45123;
已经尝试过 grep,但这似乎适用于多个元素的向量。
【问题讨论】:
除非我忽略了某些东西,否则我找不到以下问题的解决方案。
如果我有以下单元素向量:
c("133 45123; 4514;25")
我怎样才能找到这个元素中有“;”的位置?和“”,这样我就可以使用 substr 获得:
45123;
已经尝试过 grep,但这似乎适用于多个元素的向量。
【问题讨论】:
x <- c("133 45123; 4514;25")
stringr::str_extract(x, "\w+(?=; )")
[1] "45123"
在基础 R 中:
sub(".*?(\w+); .*", "\1", x)
[1] "45123"
甚至:
regmatches(x, regexpr("\w+(?=; )", x, perl = TRUE))
[1] "45123"
【讨论】:
4514。 OP 特别声明他们只想捕获具有; 和" " 的元素。请注意,如果您使用 \d+(?=;) 如果我使用了贪心函数,例如 gsub 和 str_extract_all 和 gregexpr 那么我将得到 2 个结果而不是一个。但是使用(?=; )我确保我只有一个结果
我找到了部分解决方案。 Strsplit() 将查看向量的每个元素,并根据您指定的分隔符将单个元素分成各种较小的向量。这有助于将元素缩减为更小的向量,然后您可以在这些向量上使用 grep()。
【讨论】: