我正在处理来自数据库的数据,该数据库产生有关交易的信息。
问题在于,事务可以包含任意数量的相关属性,并且将使用每个属性的新行复制事务详细信息。
格式为:
[交易ID] [tab] [属性名称] [tab] [属性值] [tab] [date]
示例:
11111 Amount 12000
11111 Reference 101010
11111 Operator John
11111 Subject Credit
11111 Notes XXXXXXXX
11112 Amount 75000
11112 Reference 202020
11112 Operator Will
我正在尝试为EACH属性识别一个REGEX表达式,该表达式将匹配以下逻辑;
&#34;金额&#34; - 后跟 TAB - 后跟可变长度数 - 后跟 TAB < /强>
&#34;参考&#34; - 后跟 TAB - 后跟可变长度数 - 后跟 TAB < /强>
&#34;运算符&#34; - 后跟 TAB - 后跟可变长度字符串 - 后跟 TAB < /强>
&#34;主题&#34; - 后跟 TAB - 后跟可变长度字符串 - 后跟TAB
&#34; Notes&#34; - 后跟 TAB - 后跟可变长度字符串 - 后跟 TAB < /强>
答案 0 :(得分: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为另一个。
答案 1 :(得分:0)
像这样的正则表达式
(?<transactionid>\d+)\t(?<attribute>Amount|Reference|Operator|Subject|Notes)\t(?<value>\w+)
会做的。
说明:
(?<transactionid>\d+) // transaction id
\t // followed by tab
(?<attribute>Amount|Reference|Operator|Subject|Notes) // attribute
\t // followed by tab
(?<value>\w+) // value