【问题标题】:Replace square bracket with bracket using gsub [duplicate]使用gsub用括号替换方括号[重复]
【发布时间】:2019-12-03 20:11:09
【问题描述】:

我想在一个data.frame(类是字符串)中更改“[”太“(”但我收到以下错误:

gsub("[", "(", df) 中的错误: 无效的正则表达式'[',原因'缺少']''

倒车效果很好:

df <- gsub("]",")", df)

所有“]”在data.frame df中被替换

所以本质上这就是问题

df <- gsub("[","(", df)

gsub("[", "(", df) 中的错误: 无效的正则表达式'[',原因'缺少']''

任何人都可以帮助修复代码 或者是否有 gsub 的替代功能可以完成相同的功能?

【问题讨论】:

  • 方括号和圆括号是正则表达式 元字符,它们在正则表达式模式中具有特殊含义。所以,你应该逃避他们。我不知道为什么第二个版本可以工作,这很有趣。
  • 当使用 gsub(或任何其他使用模式的函数,如 grep)时,您必须考虑该模式是否包含元字符,如果是,则通过添加 ' 来转义它们的“正常”函数\\' 在它前面。

标签: r gsub


【解决方案1】:

我们还可以使用 ASCII 字符 [ 的十六进制表示,方法是在其前面加上 \\x

gsub('\\x5B', '(', '[')
# [1] "("

只是一个偏好,但我发现这在元字符 [] 与其文字/转义版本混合的情况下更具可读性。例如我发现这个:

gsub('[\\x5B\\x5D]+', '(', ']][[[', perl = TRUE)

比这些更具可读性:

gsub('[\\]\\[]+', '(', ']][[[', perl = TRUE)
[1] "("

gsub('[][]+', '(', ']][[[', perl = TRUE)
[1] "("

gsub('[\\[\\]]+', '(', ']][[[', perl = TRUE)
[1] "("

尤其是当你有一个长而复杂的模式时。

这是我从http://www.asciitable.com/使用的ASCII表

明显的缺点是您必须从表中查找十六进制代码。

【讨论】:

    【解决方案2】:

    [ 是。一个元字符,所以我们可能需要fixed = TRUE 或转义\\[

    gsub("[", "(", df, fixed = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多