R:基于条件的正则表达式第一次出现

标签 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] "Le la nuit"      "jours les nuits"

对于第一部分,它完全按预期工作。但是,第二部分不是这样:part2[1] 应该是 la nuit 而不是 Le la nuit

我不确定如何实现这一目标,非常感谢您提供一些指导。

最佳答案

不确定你真正想要什么,但根据你的要求,你可以使用

^(.{3,}?)(?:(?<!,)\\s)+(.*)

这是说:

^              # start of the string
(.{3,}?)       # capture 3+ characters lazily, up to...
(?:(?<!,)\\s)+ # 1+ whitespaces that must not be preceeded by a comma
(.*)           # capture the rest of the string

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>

关于R:基于条件的正则表达式第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985871/

相关文章:

mysql - 如何使用池连接来连接表?

regex - 这个正则表达式怎么写呢?

javascript - 查找一个数组中与另一个数组中的任何项目相匹配的项目

regex - 如何更改正则表达式以读取 UTF-8?

r - 匹配 switch 语句中的字符串

r - 为什么函数参数名称需要用 pmap 匹配列表名称?

r - 如何以干净的方式在深层嵌套列表上应用函数?

r - 在带有变量的 2 行上使用 melt 或 pivot_longer

javascript - 如何从 Javascript 中的字符串中删除/替换 ANSI 颜色代码

regex - 为什么正则表达式不能正常工作