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
相关产品推荐
相关产品推荐

