r - 正则表达式分组和重新排序
问题描述
恐怕我有一个正则表达式问题。我想提取字符串的第一组,即 1 位,省略第二组,即 2 位,然后提取结尾的 5 位作为第三组。
在我看来,它应该看起来像:str_extract(a, "(\\d{1})(\\d{2})(\\d{5})\\1\\3")
. 但这不起作用。
样本数据在这里,也是想要的结果,但表达方式不同:
library(tidyverse)
d <- tibble(a = as.character(as.integer(runif(10, 1e8, 2e8))) )
d %>%
mutate(want_but_wrong_regex = str_remove(a, "(?<=\\d)\\d{2}")) #
# A tibble: 10 x 2
#a want_but_wrong_regex
#<chr> <chr>
# 1 103016397 1016397
#2 164356395 1356395
#3 134615352 1615352
#4 176581897 1581897
#5 127035705 1035705
#6 158055182 1055182
#7 193991176 1991176
#8 147845896 1845896
#9 177083273 1083273
#10 129086338 1086338
解决方案
你做错了。您正在捕获组但不提取这些组。使用字符串替换函数,例如在参数和in 中gsub
捕获组,您将获得所需的结果pattern
groups reference
replacement argument
strings <- c('12233333', '23345678', '00123456')
gsub('(\\d{1})(\\d{2})(\\d{5})', '\\1\\3', strings)
[1] "133333" "245678" "023456"
推荐阅读
- python - 使用 pyexcelerate 的数据框打印索引
- r - 更改ggplot中形状的lineend
- swift - Swift:使用单元格换行符将字符串导出到 CSV
- html - 如何制作 2 列 div,每列 3 行,在另一个框内居中,两列之间有间隙
- python - Python pandas如何将多行合并为一?
- android - 布局唯一标识
- javascript - JS 或 TS - 获取接口的键
- javascript - 暂停我的 API 端点,直到事件发生
- assembly - x86-64 MASM:尝试使用标签数组,出现错误 LNK2017。我真的需要 /LARGEADDRESSAWARE:NO 吗?
- wpf - 带有占位符的确认代码文本框