我如何在字符串名称和换行符之间提取文本?

问题描述 投票:0回答:4

我正在尝试在字符串名称和换行符之间提取文本。数据是从.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

由于\ n,在.csv文件中查找时,数据位于新行中。但是,在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
r regex string gsub
4个回答
2
投票

我们可以使用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")

1
投票

使用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"  

1
投票

要回答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")

1
投票

这里是使用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" 

DATA

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")
© www.soinside.com 2019 - 2024. All rights reserved.