寻求有关正确正则表达式代码的帮助,以将发票编号、日期、说明、总光盘数和净值分到不同的组中。
难以在描述列中找到模式。
下面还提供了我的代码的示例:
[0-9A-Z]+\s(\d{4}-\d{2}-\d{2})+\s([A-Z0-9]+\s)
文本字符串示例:
2020-06-11 Sample Vendor Page 1
A/P Remittance Advice
Direct Deposit 2020-06-11
Cheque # 10353 Vendor # 0828 Sample Company, ULC
Invoice # Date Description Gross Disc Net
===================================================================================
222036 2020-05-06 P2153664 11,237.62 .00 11,237.62
222054 2020-05-06 P2153894 6,582.17 .00 6,582.17
222160 2020-05-01 P2152759 50,895.56 .00 50,895.56
222166 2020-05-01 P2153663 28,046.09 .00 28,046.09
222249 2020-05-05 P2154421 6,030.03 .00 6,030.03
222417 2020-05-05 P2153893 17,676.57 .00 17,676.57
CR01BCFF 2020-06-08 MULTI MCBS 6,872.59- .00 6,872.59-
DM2005R105 2020-06-02 MAY 20 RTN,EXP,N/CH 79.60- .00 79.60-
DM2005R450 2020-06-02 MAY 20 RTN,EXP,N/CH 20.70- .00 20.70-
DM20065533 2020-06-05 VPFP PROGRAM FEES 556.93- .00 556.93-
==========================================
112,938.22 .00 112,938.22
Printed on 2020-06-11 at 13:35
最佳答案
由于您知道前两列和后三列的模式,因此您可以使用
^\w+\s(\d{4}-\d{2}-\d{2})\s(.*?)(\S+)\s(\S+)\s(\S+)$
或者,如果您必须在多行文本 block 上运行它:
(?m)^\w+\s(\d{4}-\d{2}-\d{2})\s(.*?)(\S+)\s(\S+)\s(\S+)\r?$
匹配看起来像
详细信息
^
- 字符串开头\w+
- 一个或多个单词字符\s
- 空格(\d{4}-\d{2}-\d{2})
- 四位数字,-
,两位数字,-
,两位数\s
- 空格(.*?)
- 任意数量的 0 个或多个尽可能少的字符(\S+)
- 任何 1+ 个非空格\s
- 空格(\S+)
- 任何 1+ 个非空格\s
- 空格(\S+)
- 任何 1+ 个非空格$
- 字符串/行的结尾。
关于regex - 无法找到正则表达式模式来拉取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63865824/