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

时间:2016-03-30 21:46:15

标签: regex r gsub

使用下面的列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")

1 个答案:

答案 0 :(得分:1)

尝试使用strsplit将文本拆分为两列。您可以使用此正则表达式" - "拆分最终.+\\K\\s-\\s.+\\K使用贪婪模式.+尽可能匹配,然后在匹配空格 - 连字符空间模式之前使用\\K删除匹配的内容。 .+的贪婪使它可以跳过Pro Dam - Veh - Spl Lt&#34;中的连字符。

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))