【问题标题】:How I extract text between a string name and newline?如何在字符串名称和换行符之间提取文本?
【发布时间】:2020-01-13 21:48:02
【问题描述】:

我正在尝试在字符串名称和换行符之间提取文本。数据是从 .pdf 进行 OCR 处理并包含在 R 数据框中。

例如输出到 .csv 文件。

Contract 6001 Total Hours 300, 33,350.00
Contract 6002 Total Hours 500, 500,000.00
Contract 6003 Total Hours 25, 10,050.50

在 .csv 文件中查找时,由于 \n,数据位于新行中。 但是,在 R 中执行 str() 命令时,数据显示在一行中,并且在美元金额之后的末尾有一个“\n”。

我将如何使用正则表达式来提取所有行的 Contract 和换行符之间的所有内容?

期望的输出:

6001 Total Hours 300, 33,350.00
6002 Total Hours 500, 500,000.00
6003 Total Hours 25, 10,050.50

【问题讨论】:

  • 不是您问题的确切答案,但您可能喜欢unglue::unglue_data(x, "Contract {id} Total Hours {x}, {y}")

标签: r regex string gsub


【解决方案1】:

我们可以使用sub

sub("\\w+\\s", "", str1)
#[1] "6001 Total Hours 300, 33,350.00" 
#[2] "6002 Total Hours 500, 500,000.00"
#[3] "6003 Total Hours 25, 10,050.50"  

数据

 str1 <- c("Contract 6001 Total Hours 300, 33,350.00", "Contract 6002 Total Hours 500, 500,000.00", "Contract 6003 Total Hours 25, 10,050.50")

【讨论】:

    【解决方案2】:

    要回答 OP 提出的确切问题:“我将如何使用正则表达式来提取所有行的 Contract 和换行符之间的所有内容?”,我想出了这个 regex

    sub("Contract (.*)", "\\1", str1)
    
     #  [1] "6001 Total Hours 300, 33,350.00"  "6002 Total Hours 500, 500,000.00" 
     #  [3] "6003 Total Hours 25, 10,050.50" 
    

    Regex Demo

    数据:来自@akrun 的帖子

     str1 <- c("Contract 6001 Total Hours 300, 33,350.00", 
               "Contract 6002 Total Hours 500, 500,000.00", 
               "Contract 6003 Total Hours 25, 10,050.50")
    

    【讨论】:

      【解决方案3】:

      使用readLines 将其分成几行,然后使用sub 删除"Contract "

      # input data
      Line <- "Contract 6001 Total Hours 300, 33,350.00
      Contract 6002 Total Hours 500, 500,000.00
      Contract 6003 Total Hours 25, 10,050.50"
      
      sub("Contract ", "", readLines(textConnection(Line)))
      ## [1] "6001 Total Hours 300, 33,350.00"  
      ## [2] "6002 Total Hours 500, 500,000.00"
      ## [3] "6003 Total Hours 25, 10,050.50"  
      

      【讨论】:

        【解决方案4】:

        这是使用 gsub 的基本 R 解决方案

        r <- gsub(".*?(\\d+.*)","\\1",s)
        

        这样

        > r
        [1] "6001 Total Hours 300, 33,350.00" 
        [2] "6002 Total Hours 500, 500,000.00"
        [3] "6003 Total Hours 25, 10,050.50" 
        

        数据

        s <- c("Contract 6001 Total Hours 300, 33,350.00", "Contract 6002 Total Hours 500, 500,000.00", 
        "Contract 6003 Total Hours 25, 10,050.50")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-07
          相关资源
          最近更新 更多