簡體   English   中英

替換包含模式的整個單詞 - gsub 和 R

[英]Replace a whole word containing a pattern - gsub and R

我正在嘗試從一些文本中清除一些垃圾。 在這樣做時,我假設任何有一個字母(任何字母)重復三次或更多次的單詞都是垃圾 - 我想刪除它。

我想出了這個:

gsub(pattern = "[a-zA-Z]\\1\\1", replacement = "", string)

其中string是字符向量,但這不起作用。 我嘗試過的所有其他事情都可能找到模式,但它只是刪除了模式,留下了一團糟。 我正在嘗試刪除帶有模式的整個單詞。

有任何想法嗎?

您需要將“捕獲組”分配給[.] class,方法是將其包裝在括號中,因為\\1需要參考:

gsub("([a-zA-Z])\\1\\1", "", "aabbbccdddee")
# [1] "aaccee"

你需要

gsub("\\s*[[:alpha:]]*([[:alpha:]])\\1{2}[[:alpha:]]*", "", string)
gsub("\\s*\\p{L}*(\\p{L})\\1{2}\\p{L}*", "", string, perl=TRUE)
stringr::str_replace_all(string, "\\s*\\p{L}*(\\p{L})\\1{2}\\p{L}*", "")

請參閱R 演示

string <- "This is a baaaad unnnnecessary short word"
gsub("\\s*[[:alpha:]]*([[:alpha:]])\\1{2}[[:alpha:]]*", "", string)
gsub("\\s*\\p{L}*(\\p{L})\\1{2}\\p{L}*", "", string, perl=TRUE)
library(stringr)
str_replace_all(string, "\\s*\\p{L}*(\\p{L})\\1{2}\\p{L}*", "")

全部產生[1] "This is a short word"

請參閱正則表達式演示 正則表達式詳細信息

  • \s* - 零個或多個空格
  • \p{L}* / [[:alpha:]]* - 零個或多個字母
  • (\p{L}) - 捕獲組 1:任何單個字母
  • \1{2} - 兩次出現與第 1 組中相同的值
  • \p{L}* / [[:alpha:]]* - 零個或多個字母。

具有不同正則表達式的 r2evans 示例:

gsub("(\\w)\\1{2, }", "", "aabbbccdddee")
[1] "aaccee"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM