【问题标题】:Find and replace numbers in an R txt file在 R txt 文件中查找和替换数字
【发布时间】:2020-07-04 09:49:04
【问题描述】:

我试图在 的文本文件中查找所有包含任何格式数字的句子,并将其替换为它们周围的主题标签。

例如输入以下内容:

ex <- c("I have $5.78 in my account","Hello my name is blank","do you want 1,785 puppies?", 
        "I love stack overflow!","My favorite numbers are 3, 14,568, and 78")

作为函数的输出,我正在寻找:

 > "I have #$5.78# in my account" 
 > "do you want #1,785# puppies?"
 > "My favorite numbers are #3#, #14,568#, and #78#"

【问题讨论】:

    标签: r r regex text-files gsub hashtag


    【解决方案1】:

    周围的数字是直截了当的,假设所有带有数字、句点、逗号和美元符号的东西都包括在内。

    gsub("\\b([-$0-9.,]+)\\b", "#\\1#", ex)
    # [1] "I have $#5.78# in my account"                   
    # [2] "Hello my name is blank"                         
    # [3] "do you want #1,785# puppies?"                   
    # [4] "I love stack overflow!"                         
    # [5] "My favorite numbers are #3#, #14,568#, and #78#"
    

    仅过滤掉编号的条目:

    grep("\\d", gsub("\\b([-$0-9.,]+)\\b", "#\\1#", ex), value = TRUE)
    # [1] "I have $#5.78# in my account"                   
    # [2] "do you want #1,785# puppies?"                   
    # [3] "My favorite numbers are #3#, #14,568#, and #78#"
    

    【讨论】:

      【解决方案2】:

      我们可以使用gsub

      gsub("(?<=\\s)(?=[$0-9])|(?<=[0-9])(?=,?[ ]|$)", "#", ex, perl = TRUE)
      #[1] "I have #$5.78# in my account"                   "Hello my name is blank"                        
      #[3] "do you want #1,785# puppies?"                   "I love stack overflow!"                        
      #[5] "My favorite numbers are #3#, #14,568#, and #78#"
      

      【讨论】:

        【解决方案3】:

        另一种循序渐进的方法是使用grep 识别包含模式"[0-9]" 的文本文件的元素,使用ex[....] 识别具有数字条目的文本元素子集,并使用管道运算符%&gt;% from library(dplyr) 将子集传递给gsub,然后使用@r2evans 的逻辑在数字条目周围放置主题标签,如下所示:

        library(dplyr) 
        ex[do.call(grep,list("[0-9]",ex))] %>% gsub("\\b([-$0-9.,]+)\\b", "#\\1#",.)
        

        代码的do.call(grep,list("[0-9]",ex)) 部分返回 ex 中带有数字条目的文本元素的索引。

        输出

        library(dplyr) 
        ex[do.call(grep,list("[0-9]",ex))] %>% gsub("\\b([-$0-9.,]+)\\b", "#\\1#",.)
        
        [1] "I have $#5.78# in my account"   "do you want #1,785# puppies?"                   
        [3] "My favorite numbers are #3#, #14,568#, and #78#"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-05
          • 2020-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-19
          • 2019-07-18
          • 1970-01-01
          相关资源
          最近更新 更多