Регулярное выражение отрицательного взгляда сзади в R - PullRequest
0 голосов
/ 01 ноября 2019

Я использую R для извлечения строки «***** END OF REPORT *****», в середине отчета их много, и я хочу извлечь только последнюю »***** КОНЕЦ ОТЧЕТА ***** "в конце отчета.

A - это не то, что я хочу извлечь, потому что это не реальный конец отчета, за ним следует следующая частьотчета;B - это то, что я хочу, потому что за концом отчета следуют некоторые символы, и никакой другой информации после этого нет.

A:

"    ***** END OF REPORT *****

¿     ----------------------------------------------------------------------- 
-------------------------------------------------------------
AABBCC00/A1                                    G E N E R A L  L E D G E R                    
EFF DATE : 01/02/2019 PAGE :    1
AA111                                  GL TRANSACTION LISTING FROM 01/01/2019 
TO 31/01/2019       RUN DATE : 02/02/2019 AT 01:09:15

----------------------------------------------------------------------------- 
-------------------------------------------------------"

B:

"     ***** END OF REPORT *****

·         +      ~      ,      o;      J      óX      cg      v      
Ô”     ¡¢     Å°     ô¾     Í     ‘Û"

Ниже приведено регулярное выражение, которое я написал до сих пор, но оно не работает должным образом.

str_detect(A,"(\\Q*****\\E END OF REPORT \\Q*****\\E\n.+)(?!--------------------$)" )

A должно возвращать FALSE;B должен вернуть TRUE (реальный конец).

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019
report[which.max(grepl("END OF REPORT", report[c(1)]))]
0 голосов
/ 01 ноября 2019

Вот еще один подход к проблеме, который возвращает номер строки последнего вхождения строки «END OF REPORT»:

library(stringr)

report <- readLines("/path/of/your/report")

tail(str_which(report, ".*END OF REPORT.*"), n = 1L)

Этот код читает ваш отчет и превращает его в символьный вектор. в которой каждая строка является одним элементом. str_which() возвращает номера строк (фактически, индексы), в которых появляется строка «END OF REPORT», а tail() дает вам последнюю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...