R 中的正则表达式 - 删除最后一个符号后的所有内容

Regular expression in R - remove everything after last symbol

使用下面的列 RelatedToText,我想创建 2 个新列 Coverage_TypeName

如果能找到最后一个“-”号前后的内容,我想我应该可以了。但是,如果您看到最后一种情况,则在名称的各个部分之间有一个“-”符号,即在 Mayur 和 Cook 之间。

我的问题有两个:首先,我应该如何提取最后一个“-”符号前后的内容?其次,如果名称本身包含上面引用的破折号,我应该如何正确提取内容?

RelatedToTxt                        Coverage_Type           Name
Collision - NAWADA REALTY, INC      Collision               NAWADA REALTY, INC
Collision - Don Cooks               Collision               Don Cooks
Pro Dam - Veh - Spl Lt - Raj Perk   Pro Dam - Veh - Spl Lt  Raj Perk
Rental Reimbursement - Mayur-Cook   Rental Reimbursement    Mayur-Cook

示例数据:

RelatedToTxt <- c("Collision - NAWADA REALTY, INC", "Collision - Don Cooks",
    "Pro Dam - Veh - Spl Lt - Raj Perk", "Rental Reimbursement - Mayur-Cook")

尝试使用 strsplit 将文本分成两列。您可以使用此正则表达式拆分最后的 " - ".+\K\s-\s.+\K 使用贪婪模式 .+ 来尽可能多地匹配,然后在匹配 space-连字符-[= 之前​​使用 \K 丢弃已经匹配的内容24=] 模式。 .+ 的贪婪性允许它跳过 "Pro Dam - Veh - Spl Lt" 中的连字符。

strsplit(RelatedToTxt, ".+\K\s-\s", perl = TRUE)

#[[1]]
#[1] "Collision"          "NAWADA REALTY, INC"
#
#[[2]]
#[1] "Collision" "Don Cooks"
#
#[[3]]
#[1] "Pro Dam - Veh - Spl Lt" "Raj Perk"
#
#[[4]]
#[1] "Rental Reimbursement" "Mayur-Cook"

输出可以变成两列

do.call(rbind, strsplit(RelatedToTxt, ".+\K\s-\s", perl = TRUE))