-1

好的 - 这远远超出了我对正则表达式的有限了解。我们收到来自银行实体的固定文本文件格式的报告。不幸的是,他们的系统会导出带有数据文件的页眉,在我们结束处理之前必须将其删除。页眉以相同的文本开始和结束,但内容会发生变化(日期和页码)。一个典型的看起来像:

00007xxxxx     LAST1,FIRST1            111111       20120930
ABCD                    EXPORT RPT          10/04/12 at 10/04/12 16:20   Seq 1501   Page    16

MRK014 Report Date: 10/04/12

Acct#          Name                   SH. Balance       QTR (YYYYMMDD)
----------------------------------------------------------------------------------------------------
00007xxxxx     LAST2,FIRST2            222222       20120930

所以每个标题都以“ABCD”开头(实际上是银行的名称,为了隐私,这里只是删除了)并以 -------------------- 行结束。

我需要把它归结为两行的客户数据(00007xxxxx - 这些帐号每人都会改变)。

所以我需要从“ABCD”到“---”的末尾进行选择以删除该文本块。

4

2 回答 2

0

为确保您删除报告的正确部分,我将使用更复杂的正则表达式模式。

使用正则表达式模式

(?<=[\n\r])ABCD\s+EXPORT\s+RPT\s[^-]+[\n\r]\-+[\n\r]+

并用空字符串替换每个匹配项。

但是,如果您的环境不支持正则表达式lookbehind,那么您必须使用模式:

([\n\r])ABCD\s+EXPORT\s+RPT\s[^-]+[\n\r]\-+[\n\r]+

并用第一组替换每个匹配项。

例如在JavaScript中它将是:

str.replace(/([\n\r])ABCD\s+EXPORT\s+RPT\s[^-]+[\n\r]\-+[\n\r]+/g, "$1")

在此处测试此代码。

于 2012-10-05T13:30:41.753 回答
0

试试这个正则表达式..这是一个Java代码..您可以在您的语言中使用给定的模式..

str = str.replaceAll("ABCD((.*?)[\n\r])+(\\-*)", "");

其中str包含您的上述数据.. 行由\n我假设..

于 2012-10-05T13:29:17.703 回答