正则表达式匹配字符串后跟不同的格式

时间:2017-08-25 03:29:56

标签: regex

我正在处理来自数据库的数据,该数据库产生有关交易的信息。

问题在于,事务可以包含任意数量的相关属性,并且将使用每个属性的新行复制事务详细信息。

格式为:

[交易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 < /强>

2 个答案:

答案 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+)

会做的。

查看regex101.com

说明:

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