【问题标题】:A regex to remove all words which contains number in R用于删除所有包含 R 中数字的单词的正则表达式
【发布时间】:2017-12-03 13:40:13
【问题描述】:

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

例如:

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

【问题讨论】:

  • 到目前为止你尝试过什么?如果您收到错误邮政编码和任何错误消息
  • 出于好奇,R 代表什么?
  • R 是一种主要用于统计计算和图形的编程语言。它是免费提供的。用户可以在包括 Windows、Mac OS X 和 Linux 在内的各种操作系统上编译和运行 R。与流行的软件开发语言(如 C++ 或 Java)相比,该语言被认为是非常规的。使 R 从大多数其他语言中脱颖而出的原因在于它充当了交互式统计环境。 reference
  • @Phil 我试图从我的文本中删除一些包含数字的代码。

标签: r regex text-mining


【解决方案1】:

试试gsub

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

【讨论】:

    【解决方案2】:

    选择没有数字的单词比选择和删除有数字的单词更容易:

    > 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 是空格
    • \d 是数字字符
    • 方括号内的插入符号 (^) 是否定符:查找不匹配的字符...
    • [] 内字符组后的“+”表示这些(非空白和非数字)字符的“1 次或多次”出现

    【讨论】:

      【解决方案3】:

      使用gsub 的另一种选择

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

      【讨论】:

        【解决方案4】:

        比一些答案长一点但非常容易处理的是首先将字符串转换为单词向量,然后逐字检查是否有任何数字并使用标准 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"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-21
          相关资源
          最近更新 更多