如何用R正则表达式在3-2OT的2与OT间插入短横线?
解决R正则表达式插入连字符的问题
要实现将字符串3-2OT转换为3-2-OT,你可以使用以下两种R正则表达式方案:
方案1:捕获组替换
利用捕获组分别匹配数字和OT,再在两者间插入连字符:
input_str <- "3-2OT" result <- gsub("(\\d)(OT)", "\\1-\\2", input_str) # 输出结果:"3-2-OT"
- 正则
(\\d)(OT):(\\d)捕获单个数字,(OT)捕获后续的OT - 替换式
\\1-\\2:将第一个捕获组(数字)、连字符、第二个捕获组(OT)拼接起来
方案2:正向零宽断言
通过正向预查定位数字后的位置,直接插入连字符(需开启Perl兼容正则):
input_str <- "3-2OT" result <- gsub("(?<=\\d)(OT)", "-\\1", input_str, perl = TRUE) # 输出结果:"3-2-OT"
- 正则
(?<=\\d)(OT):(?<=\\d)是正向预查,确保当前位置前是数字;(OT)匹配目标字符串 - 替换式
-\\1:在匹配到的OT前添加连字符
你之前的问题原因
你使用的\\d+\\d+是匹配连续的多位数序列(比如"1234"),和当前「数字+OT」的场景完全不匹配,所以无法得到预期结果。
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

