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

如何修改stringr代码提取连字符后任意长度的完整数字?

提取连字符后任意长度的完整数字

修正后的stringr方案

把原代码里的固定长度正则(?<=-)[[:digit:]]{3}改成(?<=-)[[:digit:]]+,就能匹配连字符后所有连续的数字,不管长度是1-4位还是其他连续数字场景:

library(stringr)

# 原示例字符串,连字符后是2位数字
str_extract(
  "extract_public_2018_20190530180949469_58906_20110101-20", 
  "(?<=-)[[:digit:]]+"
)
# 返回 "20"

# 测试你的场景示例
str_extract("0-5", "(?<=-)[[:digit:]]+") # 返回 "5"
str_extract("15-30", "(?<=-)[[:digit:]]+") # 返回 "30"
str_extract("abc-1234", "(?<=-)[[:digit:]]+") # 返回 "1234"
str_extract("xyz-9", "(?<=-)[[:digit:]]+") # 返回 "9"

正则说明:

  • (?<=-):正向零宽断言,确保匹配的数字前面是连字符
  • [[:digit:]]+:匹配1个或多个连续数字(贪婪模式,会取尽连字符后的所有连续数字)

更简洁的基础R替代方案

如果你的字符串里连字符后只有数字(没有其他非数字字符),用基础R的sub函数更直接,直接去掉连字符及前面的所有内容:

sub(".*-", "", "extract_public_2018_20190530180949469_58906_20110101-20") # 返回 "20"
sub(".*-", "", "15-30") # 返回 "30"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:24:57