Как извлечь текст между именем строки и переводом строки? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь извлечь текст между именем строки и новой строкой. Данные OCR'ы из .pdf и содержатся в кадре данных 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. Однако при выполнении команды str () в R данные отображаются в одной строке и имеют символ '\ n' в конце после суммы в долларах.

Как бы я использовал регулярное выражение для извлечения всего между контрактом и перевод строки для всех строк?

Желаемый вывод:

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

Ответы [ 4 ]

2 голосов
/ 14 января 2020

Мы можем использовать 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 голос
/ 14 января 2020

Чтобы ответить на точный вопрос, предложенный ОП: «Как бы я использовал регулярное выражение, чтобы я извлекал все между Контрактом и новой строкой для всех строк?» , я придумал это 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")
0 голосов
/ 14 января 2020

Используйте 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"  
0 голосов
/ 14 января 2020

Вот базовое решение R, использующее gsub

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...