You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何编写正则表达式提取符合指定后缀要求的两个数字

问题解决方案

错误原因

你编写的正则未匹配两个数字之间的A/分隔内容,两个捕获组直接相邻,无法匹配到存在中间字符的目标结构,因此无法命中符合规则的字符串。

正确实现

正则表达式

使用如下正则即可同时满足两个匹配条件,仅当两个后缀规则都满足时才会捕获到对应数字:

^(\d+)A\/(\d+)B$

规则说明:

  • ^ 匹配字符串起始位置,避免前缀冗余内容干扰
  • 第一个捕获组(\d+)提取后缀为A/的数字
  • 固定匹配两个数字中间的分隔符A/
  • 第二个捕获组(\d+)提取后缀为B的数字
  • $ 匹配字符串结束位置,避免后缀冗余内容干扰

如果需要在长文本中提取符合该规则的子串,可去掉首尾的^和$。

R语言代码示例

base R 实现(开启perl=TRUE)

# 测试用例
test_str <- c("30A/305B", "30/305B", "30A/305")
# 正则规则,注意R中反斜杠需要转义
pattern <- "^(\\d+)A/(\\d+)B$"
# 执行匹配
match_res <- regmatches(test_str, regexec(pattern, test_str, perl = TRUE))
# 格式化输出:匹配成功返回两个数字,失败返回NULL
output <- lapply(match_res, function(item) {
  if (length(item) == 3) as.integer(item[-1]) else NULL
})

执行后output结果为:

[[1]]
[1]  30 305

[[2]]
NULL

[[3]]
NULL

完全符合需求。

stringr 包实现(更简洁)

library(stringr)
test_str <- c("30A/305B", "30/305B", "30A/305")
pattern <- "^(\\d+)A/(\\d+)B$"
match_res <- str_match(test_str, pattern)[, 2:3]

执行后匹配失败的行会返回NA,按需过滤即可。

内容的提问来源于stack exchange,提问作者Fabio Correa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:45:03