【问题标题】:How to use gsub and regex to identify and remove consecutive symbols?如何使用gsub和regex来识别和删除连续的符号?
【发布时间】:2022-11-22 01:36:46
【问题描述】:

我有一列包含这样的值:

structure(list(col1 = c(" |  |  |  |  |  |  |  |", "|  |  |  |  |  |  |  |  |  |  |  |  |  |             |", 
"|  |  |  |  |  |  |  |  |  |  |  |  |  |  | ", "stop|", "stop| | ", 
"stop | go")), class = "data.frame", row.names = c(NA, -6L))

我希望能够删除 | 的所有迭代,当它们连续出现时,或者如果它们显示为 | || | |

目前,我正在尝试找出管道的所有迭代,但它们似乎有点随机。我想知道是否有办法确保我的迭代涵盖以下实例:

  1. 当连续出现多个|
  2. 当连续出现多个|并带有多个空格时(例如| || | |
  3. |位于行尾时(例如,\\|$

    但是,我会保留stop | go 之间的管道。

    这是我现在正在使用的代码,但它删除了stop | go 中的管道。

    df$col1 <- gsub('[\\| ]{2,}|[\\|$]', '', df$col1)
    

    我想删除所有 | 符号,除了 stop | go 中的符号。

【问题讨论】:

  • @RobertHacken 我刚刚更新了我的问题。谢谢!

标签: r gsub


【解决方案1】:

也许这行得通

trimws(trimws(gsub('(\|\s+){2,}', "", df$col1),
 whitespace = "\s+\|"), whitespace = "\|")

-输出

[1] ""          ""          ""          "stop"      "stop"      "stop | go"

【讨论】:

    【解决方案2】:

    你可以这样做:

    gsub('\|\s*\||\|\s*$', '', df$col1)
    #> [1] "       "                   "                         "
    #> [3] "              "            "stop"                     
    #> [5] "stop "                     "stop | go"
    

    还有一个简单的trimws,如果你不想要留下的空间。

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2018-05-13
      相关资源
      最近更新 更多