【问题标题】:gsub specific pattern and position in character stringgsub 特定模式和字符串中的位置
【发布时间】:2021-07-03 19:17:42
【问题描述】:

这可能是一个相当容易解决的问题,但我的 RegExpr 不如理想中的那么好,因此感谢您的帮助。我在别处找过,没有什么对我有用。

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

学位代码 - 专业名称 EG - “BA - 计算机材料”

IE 一个单词、单个空格、破折号、单个空格、单词。

它不能识别破折号一侧或两侧的多个空格,如果它看不到空格,它将用小写 s 替换破折号两侧的字母,我认为 \s 或 \s 空白它会替代。

这一点格式修复是更大的 mutate 语句的一部分,即带括号的单行 ala 其他地方的 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)gsub("\\b\\s*-\\s*\\b", " - ", var)
  • 是的,效果很好,感谢您在下面发布这个作为答案,更重要的是,添加对 RegExpr 的每个部分的作用以及包含它的原因的描述。谢谢!

标签: r regex gsub


【解决方案1】:

你可以使用

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

请参阅regex demo #1regex 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,@987654330 @ 匹配任何 Unicode 破折号,\x{00AD} 匹配软连字符,\x{2212} 匹配减号。

【讨论】:

  • 1) - 这行得通! 2) - 您为 RegExpr 的每个部分添加了上下文,这非常有帮助!谢谢你!!!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2012-07-31
相关资源
最近更新 更多