2014-03-14 36 views
0

我有一个EDI文件,其结构如下。该文件有多个记录,每个记录包含一个标题(例如EDI.DD.0000000001.20130809),然后是内容(即文本的多个段落),然后是页脚(例如报告结束/无EDI活动)。我必须使用三组使用正则表达式来读取整个文件。如何使用正则表达式搜索文件中的重复段落

我正在使用以下正则表达式来读取文件。

(?< 1header> [A-Z] {3}。[A-Z] {2}。[0-9] {10}。[0-9] {8})| (?< 2footer> \ b(End \ sof \ sReport | No \ sEDI \ sActivity)\ b)|

(?< 3content>(?< = \ķ< 1header>)。*(?= \ķ< 2footer>))

即表达读取相应组的 “标头” 和 “页脚” 正常但没有选择“内容”组中的页眉和页脚之间的内容。

我在下面的文件中更改了页眉和页脚的字体,以帮助理解格式。 我正在使用ASP.Net 3.5框架。

感谢您的帮助提前。

// -------------------------开始EDI文件--------------- -------------------------- //

EDI.DD.0000000001.20130809

汇款人信息 公司名称:UNITED 2011三 鉴定:9024125001 原产DFI:002100002

接收机信息 收货人姓名:健康& WELLNESS DFI帐号:0000000000000001 接收DFI ID:434343430 身份证号码: 交易类型:22存款


汇款人信息 公司名称:BLUE CHOICE 鉴定:9024125001

报告结束

EDI.DD.0006578987.20130809

没有EDI活动

EDI.SV.0000000555。20130809

汇款人信息 公司名称:佛罗里达 的大学鉴定:A426004813 原产DFI:004200001

   TRANSACTION INFORMATION 

输入描述:vndr pymnt 入门级代码:CTX 服务类代码:ACH项混合

    REMITTANCE ADVICE ACCOUNTS 
        RECEIVABLE OPEN ITEM REFERENCE 

卖方发票号码:10016 的Pmt操作代码: 已付金额:发票的$ 800.00 金额: 金额折扣的:

报告

结束// --------------- ----------文件结尾------------------------------------- ------------- //

+0

我开始明白奥巴马医院为什么迟到。 –

回答

0

当与以下选项组合:

  • .NETMultilineSingleline(原文如此)
  • OSX/iOS的NSRegularExpressionDotMatchesLineSeparatorsNSRegularExpressionAnchorsMatchLines

尝试:

^(?<header>[A-Z]{3}.[A-Z]{2}.[0-9]{10}.[0-9]{8})$(?<content>.+?)^(?<footer>End\sof\sReport|No\sEDI\sActivity)$ 

下面是从输入日期的.NET解决方案的示范OP,通过在线.NET正则表达式测试仪regexhero.net(需要带有Silverlight的浏览器):

http://regexhero.net/tester/?id=081cf97e-4c0b-4efb-b891-91f7cb03afb0

+0

我试过你的表达式,但它返回一个空字符串。我正在使用ASP .Net 3.5和NSRegularExpressionDotMatchesLineSeparators和NSRegularExpressionAnchorsMatchLines不可用。 – user3415249

+0

@ user3415249:问题标记为“nsregularexpression”,这意味着OSX/iOS。你应该添加一个'''标签,并且在你的问题中提及你的环境。我已经更新了我的答案,提供了一个'.NET'解决方案,但目前我无法验证它 - 请告诉我它是否可行。 – mklement0

+0

使用多行选项给了我相同的结果,即空字符串。 – user3415249