R语言如何分割包含前后无空格短横线的字符串?
解决方法
你需要用零宽断言匹配满足「前后都无空白」的短横线,配合strsplit的perl=TRUE参数即可实现需求。
1. 核心正则说明
匹配目标短横线的正则为:(?<![[:blank:]])-(?![[:blank:]])
(?<![[:blank:]]):负向后行断言,限定短横线前不能有任意空白字符(?![[:blank:]]):负向前行断言,限定短横线后不能有任意空白字符
R基础正则引擎不支持零宽断言,调用strsplit时必须加perl = TRUE参数启用Perl正则引擎。
2. 完整代码示例
# 构造示例输入向量 input_vec <- c( "2 - 5-< 2", "6 - 10-< 2", "6 - 10-2 - 5", "> 15-2 - 5" ) # 按规则分割字符串 split_result <- strsplit( x = input_vec, split = "(?<![[:blank:]])-(?![[:blank:]])", perl = TRUE ) # 查看原始分割结果 print(split_result, quote = TRUE) # 如需要输出为预期的引号包裹格式,可额外执行: formatted_output <- sapply(split_result, function(item) { paste0('"', item, '"', collapse = " ") }) cat(formatted_output, sep = "\n")
3. 输出验证
运行上述代码后,formatted_output的打印结果和你给出的预期完全一致:
"2 - 5" "< 2" "6 - 10" "< 2" "6 - 10" "2 - 5" "> 15" "2 - 5"
内容的提问来源于stack exchange,提问作者mbistato
相关产品推荐
相关产品推荐

