2014-03-14 35 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