【问题标题】:Regex over multiple lines with special characters带有特殊字符的多行正则表达式
【发布时间】:2012-05-09 15:22:05
【问题描述】:

我希望有人可以帮助我处理这个正则表达式。我只用它来收集字符串中的单个单词,所以我不确定如何处理多行以及看起来像 ASCII 字符的内容。

这里是文本块:

Information       - RETAILEAITRT00003 - Traitement        - Processing        - --->  Recovery from 05/09/2012 at 09:17:50 AM 

Information       - RETAILEAITRT00020 - Traitement        - Processing        - --->  Information recovery starts on 05/09/2012 at 09:17:50 AM 

Information       - RETAILEAITRT00021 - Traitement        - Processing        - ---->  File processing: C:\Program Files (x86)\Prog\Prog RIT\Web Orders\live\Prog Import\Order_110039354.tab
Information       - RETAILEAITRT00005 - Traitement        - Processing        - --->  End of information recovery on 05/09/2012 at 09:17:51 AM 
Information       - RETAILEAITRT00006 - Traitement        - Processing        -    -> 6 records read 
Information       - RETAILEAITRT00008 - Traitement        - Processing        -    -> 6 records processed 
Information       - RETAILEAITRT00010 - Traitement        - Processing        -    -> 6 integrated records 
Information       - RETAILEAITRT00015 - Traitement        - Processing        -    ->  No integration errors 

Information       - RETAILEAITRT00020 - Traitement        - Processing        - --->  Information recovery starts on 05/09/2012 at 09:17:51 AM 

Information       - RETAILEAITRT00021 - Traitement        - Processing        - ---->  File processing: C:\Program Files (x86)\Prog\Prog RIT\Web Orders\live\Prog Import\Order_110039355.tab
Third-party       -  : La raison sociale doit �tre renseign�e 
Third-party       - _SHIP : La raison sociale doit �tre renseign�e 
Erreur            - RETAILEAIDOC00008 - Document          - Document          - address The internal reference enables the recovery of a document. It is mandatory 
Erreur            - RETAILEAIDOC00008 - Document          - Document          - address The internal reference enables the recovery of a document. It is mandatory 
Information       - RETAILEAITRT00005 - Traitement        - Processing        - --->  End of information recovery on 05/09/2012 at 09:17:52 AM 
Information       - RETAILEAITRT00006 - Traitement        - Processing        -    -> 4 records read 
Information       - RETAILEAITRT00008 - Traitement        - Processing        -    -> 4 records processed 
Information       - RETAILEAITRT00012 - Traitement        - Processing        -    ->  No records integrated 
Information       - RETAILEAITRT00013 - Traitement        - Processing        -    -> 4 records contain errors 

Information       - RETAILEAITRT00003 - Traitement        - Processing        - --->  Recovery from 05/09/2012 at 09:33:03 AM 

Information       - RETAILEAITRT00020 - Traitement        - Processing        - --->  Information recovery starts on 05/09/2012 at 09:33:03 AM 

Information       - RETAILEAITRT00021 - Traitement        - Processing        - ---->  File processing: C:\Program Files (x86)\Prog\Prog RIT\Web Orders\live\Prog Import\Order_110039356.tab
Information       - RETAILEAITRT00005 - Traitement        - Processing        - --->  End of information recovery on 05/09/2012 at 09:33:05 AM 
Information       - RETAILEAITRT00006 - Traitement        - Processing        -    -> 6 records read 
Information       - RETAILEAITRT00008 - Traitement        - Processing        -    -> 6 records processed 
Information       - RETAILEAITRT00010 - Traitement        - Processing        -    -> 6 integrated records 
Information       - RETAILEAITRT00015 - Traitement        - Processing        -    ->  No integration errors 

Information       - RETAILEAITRT00020 - Traitement        - Processing        - --->  Information recovery starts on 05/09/2012 at 09:33:05 AM 

Information       - RETAILEAITRT00021 - Traitement        - Processing        - ---->  File processing: C:\Program Files (x86)\Prog\Prog RIT\Web Orders\live\Prog Import\Order_110039357.tab
Information       - RETAILEAITRT00005 - Traitement        - Processing        - --->  End of information recovery on 05/09/2012 at 09:33:06 AM 
Information       - RETAILEAITRT00006 - Traitement        - Processing        -    -> 6 records read 
Information       - RETAILEAITRT00008 - Traitement        - Processing        -    -> 6 records processed 
Information       - RETAILEAITRT00010 - Traitement        - Processing        -    -> 6 integrated records 
Information       - RETAILEAITRT00015 - Traitement        - Processing        -    ->  No integration errors

但是,我只想要这个片段:

Information       - RETAILEAITRT00020 - Traitement        - Processing        - --->  Information recovery starts on 05/09/2012 at 09:17:51 AM 

Information       - RETAILEAITRT00021 - Traitement        - Processing        - ---->  File processing: C:\Program Files (x86)\Prog\Prog RIT\Web Orders\live\Prog Import\Order_110039355.tab
Third-party       -  : La raison sociale doit �tre renseign�e 
Third-party       - _SHIP : La raison sociale doit �tre renseign�e 
Erreur            - RETAILEAIDOC00008 - Document          - Document          - address The internal reference enables the recovery of a document. It is mandatory 
Erreur            - RETAILEAIDOC00008 - Document          - Document          - address The internal reference enables the recovery of a document. It is mandatory 
Information       - RETAILEAITRT00005 - Traitement        - Processing        - --->  End of information recovery on 05/09/2012 at 09:17:52 AM 
Information       - RETAILEAITRT00006 - Traitement        - Processing        -    -> 4 records read 
Information       - RETAILEAITRT00008 - Traitement        - Processing        -    -> 4 records processed 
Information       - RETAILEAITRT00012 - Traitement        - Processing        -    ->  No records integrated 
Information       - RETAILEAITRT00013 - Traitement        - Processing        -    -> 4 records contain errors 

那里也有一些特殊字符,显示为奇怪的问号。我真的不知道从哪里开始。我想它必须寻找 ^Erreur,然后抓住它上面和下面的行,直到找到带有空格的 ^...?

谢谢

【问题讨论】:

  • 不清楚你的匹配标准是什么。您说向上和向下查找直到找到带有空格的行,但在上面的示例中,它包括第一个仅空白行上方的行。匹配的定义标准是什么?
  • 这是三个条目..两个没有错误,然后一个在中间有一个错误。每个条目总是以一行开头,上面写着“信息恢复开始于”。如果出现错误,我希望返回整个块。

标签: regex


【解决方案1】:

我能够让它与以下正则表达式一起工作:

Information.+recovery starts.+\n\n(?:.+\n)+(?:Erreur.+\n)+(?:.+\n)+

注意:这需要使用“g”(全局)标志(在 JavaScript 中测试成功)。不确定您使用的是哪种语言,但它应该有一个等效的标志。

是的,它非常丑陋:)。这基本上就是它要寻找的东西:

  • 以“信息”开头并包含“恢复开始”字样的行
  • 后跟一个空行
  • 后跟至少一个通用行
  • 后跟至少一行以“Erreur”开头的行
  • 后跟任何连续的非空白行

【讨论】:

  • 太棒了!你真的让我起床并运行。我没有让你的工作完全按照原来的样子工作。我自己做了一些研究和思考,并想出了这个:信息。+恢复开始。+\n(?:.+\n){5}Erreur(?:.+\n)(?: .+\n){5} - 更严格一点,但我会测试它,它应该可以解决问题。再次感谢!
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2014-02-19
  • 2022-10-22
相关资源
最近更新 更多