【问题标题】:R: removing part of the word in a character stringR:删除字符串中的部分单词
【发布时间】:2017-12-14 10:10:49
【问题描述】:

我有一个字符向量

words <- c("somethingspan.", "..span?", "spanthank", "great to hear", "yourspan")

我正在尝试从向量中的每个单词中删除span AND 标点符号

> something thank great to hear your

问题是,span 是否出现在我感兴趣的单词之前或之后是没有规定的。此外,span 可以粘贴到:i) 仅字符(例如 yourspan),仅标点符号(例如..span?)或字符和标点符号(例如somethingspan.)。

我在 SO 中搜索了答案,但通常我看到删除整个单词(如 here )或字母/标点符号之后/之前的字符串元素(如 here )的请求

任何帮助将不胜感激

【问题讨论】:

  • 请分享失败的代码。
  • @A5C1D2H2I1M1N2O1R2T1 gsub("span", "", words) 只会删除 span,但会在 somethingspan. 中保留 .。问题不清楚。
  • gsub("span[[:punct:]]*", "", words)
  • @AvinashRaj 两者的结合.
  • 试试paste(gsub("[[:punct:]]*span[[:punct:]]*", "", words), collapse=" ")

标签: r regex gsub tm stringr


【解决方案1】:

你可以使用

[[:punct:]]*span[[:punct:]]*

请参阅regex demo

详情

  • [[:punct:]]* - 0+ 个标点符号
  • span - 文字子串
  • [[:punct:]]* - 0+ 个标点符号

R Demo:

words <- c("somethingspan.", "..span?", "spanthank", "great to hear", "yourspan")
words <- gsub("[[:punct:]]*span[[:punct:]]*", "", words) # Remove spans
words <- words[words != ""] # Discard empty elements
paste(words, collapse=" ")  # Concat the elements
## => [1] "something thank great to hear your"

如果在删除不需要的字符串后只有空白元素,您可以将第二步替换为words &lt;- words[trimws(words) != ""](而不是words[words != ""])。

【讨论】:

    【解决方案2】:

    https://regex101.com/ 在这里你可以尝试一切。

    clean_words<- gsub(pattern = "span",replacement = "",words, perl = T)
    # if you want the sentence
    sentence<-paste(clean_words, sep = " ", collapse = " ")
    
    # to remove punctuation this regex only takes from A to z
    clean_sentence<- gsub(pattern = "[^a-zA-Z ]",replacement = "",sentence, perl = T)
    

    【讨论】:

      【解决方案3】:

      使用sub 删除跨度。要将其变成一个句子,请使用pastecollapse

      library(magrittr)
      
      sub("^[[:punct:]]{,2}span|span[[:punct:]]{,2}$", "", words)  %>% paste(collapse=" ")
      

      所以它只会在开头或结尾删除一个跨度。

      输出

      [1] "something ? thank great to hear your"
      

      【讨论】:

      • "^span|span$" 不会处理"somethingspan.",最后有一个.。参见 OP:后面可以跟字符、标点符号、两者的组合等。因此,即使在 $ 之前的 [[:punct:]]? 也无济于事。问题不清楚。
      • 安德烈,这个问题太不清楚了,不过看看后面可以跟字符、标点、两者的组合等等[[:punct:]]?won' t 帮助。
      • @Wiktor,这个问题有什么不清楚的地方?我会澄清的
      • 是的,不清楚。我猜是我们所有人提供的代码。应该带领@Kasia 实现她的目标。
      • @Kasia,请考虑您的代表中可能发生的所有可能性。代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 2020-11-16
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多