用于删除 R 中包含数字的所有单词的正则表达式

A regex to remove all words which contains number in R

我想在 R 中编写一个正则表达式来删除包含数字的字符串中的所有单词。

例如:

first_text = "a2c if3 clean 001mn10 string asw21"
second_text = "clean string

试试 gsub

trimws(gsub("\w*[0-9]+\w*\s*", "", first_text))
#[1] "clean string"

select 没有数字的词比 select 和删除有数字的词更容易:

> library(stringr)
> str1 <- "a2c if3 clean 001mn10 string asw21"
> paste(unlist(str_extract_all(str1, "(\b[^\s\d]+\b)")), collapse = " ")
[1] "clean string"

注意:

  • R 中的反斜杠必须转义才能正常工作,因此需要双反斜杠
  • \b 是字边界
  • \s为白色space
  • \d为数字字符
  • 方括号内的插入符 (^) 是否定符:查找不匹配的字符...
  • [] 内字符组后的“+”表示这些(非白色 space 和非数字)字符出现“1 次或多次”

只是另一种选择 gsub

trimws(gsub("[^\s]*[0-9][^\s]*", "", first_text, perl=T))
#[1] "clean  string"

比一些答案长一点但非常容易处理的是首先将字符串转换为单词向量,然后逐字检查是否有任何数字并使用标准 R 子集。

first_text_vec <- strsplit(first_text, " ")[[1]]
first_text_vec
[1] "a2c"     "if3"     "clean"   "001mn10" "string"  "asw21"  
paste(first_text_vec[!grepl("[0-9]", first_text_vec)], collapse = " ")
[1] "clean string"