我希望删除最后一组各种类型的定界符之后的文本,以及那些定界符,除非它是一个右括号。我首先修剪尾随空格,因为空格是分隔符。
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)"
答案 0 :(得分:3)
一个选项是将第一个字符类设为可选并删除 )
[-\\ ]?[^-\\) ]+$
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兼容表达式。
(?:[ -]|(?<=\)))[^-) ]*$
sub("(?:[ -]|(?<=\\)))[^-) ]*$", "", trimws(name), perl=T)