我正在尝试在字符串名称和换行符之间提取文本。数据是从.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
我们可以使用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")
使用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"
要回答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"
数据:来自@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")
这里是使用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")