根据您的要求,我不确定您真正想要什么,但您可以使用以下内容:
^(.{3,}?)(?:(?<!,)\\s)+(.*)
这段话的意思是:
^
(.{3,}?)
(?:(?<!,)\\s)+
(.*)
在 R
中:
string <- c("Le jour la nuit", "Les jours les nuits", "les, jours les nuits")
(part1 <- sub("^(.{3,}?)(?:(?<!,)\\s)+(.*)", "\\1", string, perl = T))
(part2 <- sub("^(.{3,}?)(?:(?<!,)\\s)+(.*)", "\\2", string, perl = T))
产生收益
[1] "Le jour" "Les" "les, jours"
并且
[1] "la nuit" "jours les nuits" "les nuits"
如果需要一个
dataframe
作为结果,您可以定义一个小函数(使用
sapply
和一些逻辑):
make_df <- function(text) {
parts <- sapply(text, function(x) {
m <- regexec("^(.{3,}?)(?:(?<!,)\\s)+(.*)", x, perl = T)
groups <- regmatches(x, m)
c(groups[[1]][2], groups[[1]][3])
}, USE.NAMES = F)
(setNames(as.data.frame(t(parts), stringsAsFactors = F), c("part1", "part2")))
}
(df <- make_df(string))
这将产生以下结果,对于
string <- c("Le jour la nuit", "Les jours les nuits", "les, jours les nuits", "somejunk")
:
part1 part2
1 Le jour la nuit
2 Les jours les nuits
3 les, jours les nuits
4 <NA> <NA>
ä、ü…
或标点符号)后面的第一个空格来分割字符串。 - niko"les, jours les nuits"
变成c("les, jours", "les nuits")
吗?也就是忽略逗号后面的空格。 - nikoperl = TRUE
的回顾后断言确保逗号前面没有空格。 - Jan