匹配Q18r+指定数字+c1格式字符串的正则表达式求解
正则表达式匹配解决方案
你的问题出在原正则的逻辑拆分错误,导致条件没有正确关联,而且没把c1的要求和前面的规则整合起来。
正确的正则表达式逻辑
要同时满足三个条件,需要把规则连贯起来:
- 以
Q18r开头 - 紧跟指定数字:
1/2/3/10/11/12/997 - 最后以
c1结尾
对应的正则表达式为:^Q18r(1[0-2]|[1-3]|997)c1$
各部分解释:
^:匹配字符串起始位置Q18r:匹配固定短语(1[0-2]|[1-3]|997):分组匹配目标数字:1[0-2]:覆盖10、11、12[1-3]:覆盖1、2、3997:单独匹配997
c1:匹配结尾的固定短语$:匹配字符串结束位置
完整代码示例
library(stringr) x <- c("test", paste0(rep(paste0("Q18r", c(1:14, 997)), each = 2), c("c1", "c2"))) # 执行匹配 result <- str_subset(x, "^Q18r(1[0-2]|[1-3]|997)c1$") print(result)
运行后会输出所有符合要求的字符串:Q18r1c1、Q18r2c1、Q18r3c1、Q18r10c1、Q18r11c1、Q18r12c1、Q18r997c1
如果你的场景中目标模式只是字符串的一部分(而非整个字符串就是该模式),可以去掉正则中的^和$,改为Q18r(1[0-2]|[1-3]|997)c1。
内容的提问来源于stack exchange,提问作者deschen
相关产品推荐
相关产品推荐

