正则表达式按条件首次匹配:字符串分割结果异常求助
解决字符串分割问题
你的问题出在正则表达式的逻辑上——原来的正则(\\S{3,})\\s?(.*)只会匹配连续3个及以上非空白字符作为第一部分,但第一个字符串里开头的"Le"只有2个非空白字符,导致正则跳过了前面的内容,匹配到了后面的"jour",但sub替换时没有正确捕获前面的"Le "部分,所以part2的结果出错了。
要实现你想要的「找到第一个位于3字符以上单词后的空格作为分隔符」的逻辑,我们需要调整正则,确保捕获从开头到第一个符合条件的空格前的所有内容:
string <- c("Le jour la nuit", "Les jours les nuits") # 获取第一部分:从开头到第一个3字符以上单词后的空格前的内容 part1 <- sub("^(.*\\b\\S{3,})\\s.*", "\\1", string) # 获取第二部分:去掉第一部分和后面的空格,保留剩余内容 part2 <- sub("^(.*\\b\\S{3,})\\s", "", string)
正则解释:
^:匹配字符串开头.*\\b:匹配任意内容直到遇到单词边界(确保定位到完整的单词)\\S{3,}:匹配连续3个及以上非空白字符(即符合长度要求的目标单词)\\s:匹配目标单词后面的空格(作为分割符).*:匹配空格后的所有内容(用于part1的替换逻辑)
运行后输出:
> part1 [1] "Le jour" "Les" > part2 [1] "la nuit" "jours les nuits"
完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者niko
相关产品推荐
相关产品推荐

