如何修改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
相关产品推荐
相关产品推荐

