r删除以破折号开头和结尾的单词

时间:2016-12-14 17:47:42

标签: r regex

如何从这样的字符串中删除带有破折号(作为前缀或后缀)的单词:

x <- "word -o -dod -3 -33 dp-pd -d- --- 140 -- s- S- SS- s3- 3e- 33- 3- s SS avf-ada"

获得:

word dp-pd 140 s SS avf-ada

有时,也可以删除独立短划线。

感谢regex101:(\s-\S+)|(\S+-\s)

,我找到了解决方案

1 个答案:

答案 0 :(得分:1)

我建议使用

x <- "word -o -dod -3 -33 dp-pd -d- --- 140 -- s- S- SS- s3- 3e- 33- 3- s SS avf-ada -"
trimws(gsub("(?:\\S+-\\B|\\B-\\S+|\\B-\\B)\\s*", "", x, perl=TRUE))

请参阅regex demoR demo

<强>详情:

  • (?:\S+-\B|\B-\S+|\B-\B) - 两种选择中的任何一种:
    • \S+-\B - 除了空格,-和非字边界之外的1 +个字符,也就是说,-必须位于字符串的末尾或非字符之前字char
    • | - 或
    • \B-\S+ - 一个非单词边界,也就是说,-只有在前面带有非单词字符或字符串的开头,然后是连字符和1 +以外的字符时才匹配空白
    • \B-\B - 包含非字边界的任何-(在字符串的结尾/开头或非字字符之间)
  • \s* - 0+空格。

由于非字边界无法与TRE正则表达式版本一起使用,因此需要使用perl=TRUE