gsub 字符串中的特定模式和位置

gsub specific pattern and position in character string

这可能是一个相当简单的修复程序,但我对 RegExpr 的使用并不理想,因此不胜感激。我已经看过其他地方,没有任何东西适合我。

我正在尝试标准化一些大学学位的名称。我需要以下格式:

学位代码 - 专业名称 EG - “BA - Computer Stuff”

IE 一个单词,单个 space,破折号,单个 space,单词。

它无法识别破折号一侧或两侧的多个 space,如果看不到 space,它会将破折号两侧的字母替换为小写字母 s ,我认为 \s 或 \s 白色 space 并且它会替代。

这一点格式修复是更大的 mutate 语句的一部分,IE 中的单行括号和其他地方的 ve 示例对我不起作用。

我有示例数据:

data <- data.frame( var = c("BA-English" , "BA - English" , "BA -  Chemistry" , "BS  -  Rubber Chickens") )

    var %>%
      mutate(var = gsub("\w\S-\S\w", "\w\s-\s\w", var) ) -> var_fix )

非常感谢任何帮助。谢谢

您可以使用

gsub("\s*-\s*", " - ", var)
## Or, if the hyphen is in between word chars
gsub("\b\s*-\s*\b", " - ", var)

参见regex demo #1 and regex demo #2

详情:

  • \b - 单词边界
  • \s* - 零个或多个空格
  • - - 一个连字符

注意:如果你想标准化连字符,你也可以考虑使用gsub("(*UCP)\s*[\p{Pd}\x{00AD}\x{2212}]\s*", " - ", var, perl=TRUE) / gsub("(*UCP)\b\s*[\p{Pd}\x{00AD}\x{2212}]\s*\b", " - ", var, perl=TRUE),其中(*UCP)使得单词边界和空格模式 Unicode 识别,\p{Pd} 匹配任何 Unicode 破折号,\x{00AD} 匹配软连字符,\x{2212} 匹配减号。