提取字符串并在 R 中保留一些分隔符但不保留其他分隔符

时间:2021-04-09 05:04:56

标签: r regex

我希望删除最后一组各种类型的定界符之后的文本,以及那些定界符,除非它是一个右括号。我首先修剪尾随空格,因为空格是分隔符。

name <- c("Geomdan dong", "Geomdan-dong ", "Geomdan 1(il)-dong", "Geomdan-1(il)dong", "Geomdan-1(il) dong")

#My attempt
sub("[-\\) ][^-\\) ]*$", "", trimws(name))
[1] "Geomdan"       "Geomdan"       "Geomdan 1(il)" "Geomdan-1(il"  "Geomdan-1(il)"

#Desired output
[1] "Geomdan"       "Geomdan"       "Geomdan 1(il)" "Geomdan-1(il)"  "Geomdan-1(il)"

1 个答案:

答案 0 :(得分:3)

一个选项是将第一个字符类设为可选并删除 )

[-\\ ]?[^-\\) ]+$

Regex demo | R demo

name <- c("Geomdan dong", "Geomdan-dong ", "Geomdan 1(il)-dong", "Geomdan-1(il)dong", "Geomdan-1(il) dong")
sub("[-\\ ]?[^-\\) ]+$", "", trimws(name))

输出

[1] "Geomdan"       "Geomdan"       "Geomdan 1(il)" "Geomdan-1(il)"
[5] "Geomdan-1(il)"

如果您想保留例如只包含单词字符的字符串,您可以匹配字符类中的内容,或者在左侧断言 ) 并使用 perl=T 来使用 perl兼容表达式。

(?:[ -]|(?<=\)))[^-) ]*$

Regex demo | R demo

sub("(?:[ -]|(?<=\\)))[^-) ]*$", "", trimws(name), perl=T)
相关问题