R语言字符串处理:删除尾部指定分隔符及后续内容并保留右括号
R字符串分隔符处理正则调整方案
原实现问题根因
原正则[-\\) ][^-\\) ]*$将右括号)与短横-、空格归为同类需删除自身的分隔符,当匹配到右括号作为最后分隔符的场景(如示例第四个字符串的)dong片段)时,会连同右括号本身一同删除,导致结果错误。
调整思路
基于原始字符串定位最后一个分隔符簇的位置:
- 先删除最后一个分隔符(短横、空格、右括号任意一种)后方的所有非分隔符文本,保留分隔符本身
- 再删除残留的短横、空格分隔符,仅保留作为特殊规则豁免删除的右括号
实现代码
使用PCRE零宽后断言定位最后一个分隔符,基础R即可运行,无需额外依赖:
name <- c("Geomdan dong", "Geomdan-dong ", "Geomdan 1(il)-dong", "Geomdan-1(il)dong", "Geomdan-1(il) dong") # 分步处理:先删最后分隔符后的非分隔符内容,再删结尾残留的短横/空格 trim_name <- trimws(name) step1 <- sub("(?<=[-\\) ])[^-\\) ]*$", "", trim_name, perl = TRUE) result <- sub("[- ]+$", "", step1)
也可以合并为一行嵌套写法:
result <- sub("[- ]+$", "", sub("(?<=[-\\) ])[^-\\) ]*$", "", trimws(name), perl = TRUE))
结果验证
运行后result的输出为:
[1] "Geomdan" "Geomdan" "Geomdan 1(il)" "Geomdan-1(il)" "Geomdan-1(il)"
完全匹配预期输出,且可兼容连续分隔符簇、右括号后存在其他分隔符等边缘场景。
内容的提问来源于stack exchange,提问作者syre
相关产品推荐
相关产品推荐

