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

R语言新手求助:如何提取字符串中以XYZ-开头的目标子串

提取目标子串的几种实用方法

方法1:使用stringr包的str_extract

stringr包的正则匹配逻辑更直接,精准匹配XYZ-后跟连续数字的模式即可:

library(stringr)
d <- "Para | YTX-456 | XYZ-123456 | NTX-897"
result <- str_extract(d, "XYZ-\\d+")
print(result)
# 输出: "XYZ-123456"

这里\\d+专门匹配一个或多个连续数字,整个模式XYZ-\\d+只会锁定XYZ-及其后续的纯数字部分,不会包含空格。

方法2:使用base R的gsub

如果不想加载额外包,用base R原生的gsub也能实现,核心是替换掉目标以外的所有内容:

d <- "Para | YTX-456 | XYZ-123456 | NTX-897"
result <- gsub(".*(XYZ-\\d+).*", "\\1", d)
print(result)
# 输出: "XYZ-123456"
  • .*表示匹配任意长度的任意字符(不含换行),放在(XYZ-\\d+)前后,会把目标子串之外的所有内容全部匹配覆盖。
  • \\1代表引用括号内捕获到的XYZ-\\d+内容,替换后就只剩下我们需要的子串。

关于之前提取到空格的原因

你之前的问题大概率是正则范围没限制好,比如误用了XYZ-.+——.+会匹配包括空格在内的所有字符,直到字符串末尾,自然会带上多余空格。而用\\d+限定只匹配数字,就能避免这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:43:07