R中负向后看的正则表达式

时间:2019-11-01 05:53:06

标签: r regex string

我正在使用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 :(得分:0)

这里是解决该问题的另一种方法,该方法返回字符串“ 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()为您提供最后一个。

答案 1 :(得分:0)

const makeFoo = () => {
  let bar = () => { alert(1) }
  let foo = () => { bar() }
  return foo;
};
const makeFooStr = makeFoo.toString();

// ...

const makeFooFunc = new Function(' return (' + makeFooStr + ').apply(null, arguments)');
const foo = makeFooFunc();
foo();