regex 字符串中的标题和副标题用R中的CamelCase分隔

mjqavswn  于 2023-01-31  发布在  其他
关注(0)|答案(3)|浏览(135)

我已经刮了一个标题列表,其中一些有字幕。不幸的是,每当有字幕时,它就粘贴到标题上(如paste0())。我如何在R中将两者分开?我正在考虑一些regex,因为模式是CamelCase表示字幕,如下所示:

data <- data.frame(title = "Bilder aus dem LebenWie man Universalerbe wird")

result <- data.frame(title = "Bilder aus dem Leben",
                     subtitle = "Wie man Universalerbe wird")
nbysray5

nbysray51#

一个普通的正则表达式可以查找一个小写字母,然后查找一个大写字母,

strcapture("^(.+[a-z])([A-Z].+)", data$title, proto = list(title = "", subtitle = ""))
#                  title                   subtitle
# 1 Bilder aus dem Leben Wie man Universalerbe wird
ar7v8xwq

ar7v8xwq2#

带tidyr's(新)separate_wider_regex

library(tidyr)
separate_wider_regex(data, title, c(title = "^.+[a-z]", subtitle = "[A-Z].+"))

#  title                subtitle                                
#1 Bilder aus dem Leben Wie man Universalerbe wird

这相当于被取代的extract

extract(data, title, c("title", "subtitle"), "^(.+[a-z])([A-Z].+)")
vcudknz3

vcudknz33#

您可以使用tidyr中的separate

library(tidyverse)
data %>%
  separate(title, into = c("title", "subtitle"), sep = "(?<=[a-z])(?=[A-Z])")
                 title                   subtitle
1 Bilder aus dem Leben Wie man Universalerbe wird

sep在这里使用两个查找来定义拆分点:

  • (?<=[a-z]):正向后看,Assert在拆分点的左侧必须有小写字母,以及
  • (?=[A-Z]):Assert拆分点右侧必须有一个大写字母的正向前看

相关问题