2017-08-25 40 views
1

我正在處理來自DB的數據,該數據庫產生關於事務的信息。正則表達式匹配字符串,然後是不同的格式

問題是,事務可以具有任意數量的相關屬性,並且事務詳細信息將針對每個屬性用新行復制。

在的格式:

[事務標識符] [標籤] [屬性名] [標籤] [屬性值] [標籤] [日期]

實施例:

11111 Amount 12000 
11111 Reference 101010 
11111 Operator John 
11111 Subject Credit 
11111 Notes XXXXXXXX 
11112 Amount 75000 
11112 Reference 202020 
11112 Operator Will 

我正在嘗試爲每個屬性標識一個REGEX表達式,它將在以下邏輯上匹配;

「金額」 - 接着TAB - 接着可變長數 - 接着可變長度 - 接着TAB

「參考」 - 接着TAB號碼 - 依次爲TAB

「操作員」 - 接着TAB - 接着可變長度字符串 - 接着TAB

「主題」 - 接着TAB - 接着可變長度字符串 - 其次是TAB

「註釋」 - 其次是TAB - 跟隨通過可變長度字符串 - 接着TAB

回答

1

這個答案更適用於閱讀屬於同一事務ID的所有屬性。看看regex101.com

(?s)         // dot matches newline 
(?<tid>\d+)        // transactionid 
\t 
(?:Amount\t(?<amount>\d+))    // amount 
.\1\t         // newline, transactionid, tab 
(?:Reference\t(?<ref>\d+))    // reference 
.\1\t         // newline, transactionid, tab 
(?:Operator\t(?<ope>\w+))    // operator 
(?:.\1\t(?:Subject\t(?<sub>\w+)))?  // possible subject 
(?:.\1\t(?:Notes\t(?<not>\w+)))?  // possible notes 
(?!\1)         // negative lookahead 

對於一個簡單的解釋,你想,直到事務ID是一個不同的讀屬性。

0

甲正則表達式這樣

(?<transactionid>\d+)\t(?<attribute>Amount|Reference|Operator|Subject|Notes)\t(?<value>\w+) 

都行。

regex101.com

說明:

(?<transactionid>\d+)         // transaction id 
\t              // followed by tab 
(?<attribute>Amount|Reference|Operator|Subject|Notes) // attribute 
\t              // followed by tab 
(?<value>\w+)           // value 
+0

嗨,謝謝你。 – AlexM

+0

這是否意味着我將使用以下內容: (?( \ d +)\ t(?)\ t(? \ w +) (? \ d +)\ t(?)\ t (? \ d +)\ t(?)\ t(? \ w +) (? \ d +)\ t(?)\ t(? \ w +) (?)\ t(? \ w +) – AlexM

+0

堅持下去,這可能會改變您原來的問題。您的問題可能意味着您想一次讀取所有屬性。我將在regex101上創建一個新示例。 –

相關問題