regex - 无法找到正则表达式模式来拉取特定列

标签 regex

寻求有关正确正则表达式代码的帮助,以将发票编号、日期、说明、总光盘数和净值分到不同的组中。

难以在描述列中找到模式。

下面还提供了我的代码的示例:

[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?$

请参阅.NET regex demo

匹配看起来像

enter image description here

详细信息

  • ^ - 字符串开头
  • \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/

相关文章:

excel - 如何在多行或单行值之间进行正则表达式

javascript - 为什么这个特定的正则表达式在 JavaScript 中不起作用?

python - 非固定长度的正则表达式负回顾

python - 如何从数据帧中删除行,其中字段仅包含破折号/连字符(-),而不影响python中的负值

javascript - 如何仅在文本区域的开头删除空格和换行符

仅适用于大写字母和数字的 Java 正则表达式

regex - 识别等效的正则表达式

python - Python 中的特殊字符模式匹配

ios - 快速从字符串中提取值

java - 如何用&替换\u0026?