R:基于条件的正则表达式首次出现
我试图使用3个字符后的第一个空格来拆分字符串。这是我的密码:R:基于条件的正则表达式首次出现,r,regex,R,Regex,我试图使用3个字符后的第一个空格来拆分字符串。这是我的密码: string <- c("Le jour la nuit", "Les jours les nuits") part1 <- sub("(\\S{3,})\\s?(.*)", "\\1", string) part2 <- sub("(\\S{3,})\\s?(.*)", "\\2", string) # output > part1 [1] "Le jour" "Les" > part2 [1
string <- c("Le jour la nuit", "Les jours les nuits")
part1 <- sub("(\\S{3,})\\s?(.*)", "\\1", string)
part2 <- sub("(\\S{3,})\\s?(.*)", "\\2", string)
# output
> part1
[1] "Le jour" "Les"
> part2
[1] "Le la nuit" "jours les nuits"
string不确定您真正想要什么,但根据您的要求,您可以使用
^(.{3,}?)(?:(?<!,)\\s)+(.*)
屈服
[1] "Le jour" "Les" "les, jours"
及
因此,您可能需要一个dataframe
,如果需要,您可以定义一个小函数(使用sapply
和一些逻辑):
make_df这将产生字符串来解决它,谢谢。我的目标是使用3个字符(包括ä,ü,…
或标点符号)后的第一个空格分割字符串。你知道如何修改模式s.t.“les,jours les nuits”
获取c(“les,jours”,“les nuits”)
,例如,忽略逗号后面的空格?@A.Grothendieck:更新答案后,可以使用带perl=TRUE
的lookback,确保空格前面没有逗号。
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"
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))
part1 part2
1 Le jour la nuit
2 Les jours les nuits
3 les, jours les nuits
4 <NA> <NA>