正则表达式捕获一列中的多个单词
Regex Expression Capture Multi Words In A Column
目标:我正在努力处理一个表达式 (.NET),它可以单独捕获完整的 描述列 和一个单独的表达式,可以只提取 Net 总栏目。我知道两者都可以在一个表达式中捕获,但我需要将捕获每一列的表达式分开
我的 描述 列的正则表达式:
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+(\w+)
*这里我只得到描述的第一个词。我只需要完整的描述。
我的 Net 列的正则表达式:
^(\S+) .\d{2} \d
示例文本:
2020-08-26 PILE OF LIFE HEALTH PRODUCTS LP Page 1 A/P Remittance Advice Direct Deposit 2020-08-26
Cheque # 11361 Vendor # 0828 HAIN CELESTIAL CANADA, ULC
Invoice # Date Description Gross Disc Net
===============================================================
225299 2020-07-24 P2156678 7,610.52 .00 7,610.52
225839 2020-07-22 P2157105 7,826.28 .00 7,826.28
225969 2020-07-22 P2157106 8,760.59 .00 8,760.59
226384 2020-07-22 P2157104 42,274.76 .00 42,274.76
CR01BEPJ 2020-08-17 MULTI MCBS 4,470.06- .00 4,470.06-
CR01BEXS 2020-08-24 MULTI MCBS 5,212.81- .00 5,212.81-
DM20082311 2020-08-14 LIFESTYLE MARKETS NA 201.25- .00 201.25-
DM20083583 2020-08-17 KARDISH FOOD FRANCHI 281.37- .00 281.37-
DM20085965 2020-08-12 AVRILSUPERMARCHE-WAR 871.50- .00 871.50-
DM20086678 2020-08-12 AVRILSUPERMARCHE-WAR 871.50- .00 871.50-
DM20089459 2020-07-30 LOBLAWS 8.90- .00 8.90-
DM20089500 2020-08-14 COUNTRY GROCER-CHASE 105.00- .00 105.00-
========================================== 54,449.76 .00 54,449.76
Printed on 2020-08-26 at 6:26
2020-04-23 PILE OF LIFE HEALTH PRODUCTS LP Page 1 A/P Remittance Advice Direct Deposit 2020-04-23
Cheque # 9699 Vendor # 0828 HAIN CELESTIAL CANADA, ULC
Invoice # Date Description Gross Disc Net ===================================================================================
218124 2020-02-27 P2151168 2,253.44 .00 2,253.44
219021 2020-03-18 P2152030 35,242.65 .00 35,242.65
219216 2020-03-18 P2152031 8,306.81 .00 8,306.81
CR01BASW 2020-04-20 MULTI MCBS 5,278.05- .00 5,278.05-
DM2004W450 2020-04-17 RETURNS WFM-GR-20589 124.63- .00 124.63-
DM2004W828 2020-04-17 RETURNS WFM-GR-20589 266.09- .00 266.09-
DM20042157 2020-04-07 AVRIL 871.50- .00 871.50-
DM20043798 2020-04-07 COUNTRY GROCER 105.00- .00 105.00-
DM20043892 2020-04-07 COUNTRY GROCER 105.00- .00 105.00-
DM20048663 2020-04-07 AVRIL 871.50- .00 871.50-
DM20049986 2020-04-02 LA MOISSON 258.69- .00 258.69-
========================================== 37,922.44 .00 37,922.44
Printed on 2020-04-23 at 13:13
看看这是否适合你(写在 python(我不知道 .net)
items = [ '225299 2020-07-24 P2156678 7,610.52 .00 7,610.52',
'226384 2020-07-22 P2157104 42,274.76 .00 42,274.76',
'DM20082311 2020-08-14 LIFESTYLE MARKETS NA 201.25- .00 201.25-' ,
'CR01BEPJ 2020-08-17 MULTI MCBS 4,470.06- .00 4,470.06-']
for item in items:
print(list(filter(None,[x.strip(' ') for x in re.findall(r'\d\s([\w\s]+)\s\d',item)])))
输出
['P2156678']
['P2157104']
['LIFESTYLE MARKETS NA']
['MULTI MCBS']
要匹配第一个模式中的所有单词,您可以选择使用字符 class 后跟 1+ 个单词字符 (?:[ -]\w+)*
重复匹配 space 或连字符捕获组。
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+(\w+(?:[ -]\w+)*)
对于 Net
列,您可以扩展第一个模式并匹配 1 个或多个非白色space 字符以进行广泛匹配
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+\w+(?:[ -]\w+)*\s+\S+\s+\S+\s+(\S+)
或者更具体一点,Gross、Disc 和 Net 列匹配 Disc 的点和 2 位数字以及匹配 Gross 和 Net 的点和逗号:
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+\w+(?:[ -]\w+)*\s+\d{1,3}(?:,\d{3})*\.\d{2}-?\s+\.\d{2}\s+(\d{1,3}(?:,\d{3})*\.\d{2}-?)
目标:我正在努力处理一个表达式 (.NET),它可以单独捕获完整的 描述列 和一个单独的表达式,可以只提取 Net 总栏目。我知道两者都可以在一个表达式中捕获,但我需要将捕获每一列的表达式分开
我的 描述 列的正则表达式:
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+(\w+)
*这里我只得到描述的第一个词。我只需要完整的描述。
我的 Net 列的正则表达式:
^(\S+) .\d{2} \d
示例文本:
2020-08-26 PILE OF LIFE HEALTH PRODUCTS LP Page 1 A/P Remittance Advice Direct Deposit 2020-08-26
Cheque # 11361 Vendor # 0828 HAIN CELESTIAL CANADA, ULC
Invoice # Date Description Gross Disc Net
===============================================================
225299 2020-07-24 P2156678 7,610.52 .00 7,610.52
225839 2020-07-22 P2157105 7,826.28 .00 7,826.28
225969 2020-07-22 P2157106 8,760.59 .00 8,760.59
226384 2020-07-22 P2157104 42,274.76 .00 42,274.76
CR01BEPJ 2020-08-17 MULTI MCBS 4,470.06- .00 4,470.06-
CR01BEXS 2020-08-24 MULTI MCBS 5,212.81- .00 5,212.81-
DM20082311 2020-08-14 LIFESTYLE MARKETS NA 201.25- .00 201.25-
DM20083583 2020-08-17 KARDISH FOOD FRANCHI 281.37- .00 281.37-
DM20085965 2020-08-12 AVRILSUPERMARCHE-WAR 871.50- .00 871.50-
DM20086678 2020-08-12 AVRILSUPERMARCHE-WAR 871.50- .00 871.50-
DM20089459 2020-07-30 LOBLAWS 8.90- .00 8.90-
DM20089500 2020-08-14 COUNTRY GROCER-CHASE 105.00- .00 105.00-
========================================== 54,449.76 .00 54,449.76
Printed on 2020-08-26 at 6:26
2020-04-23 PILE OF LIFE HEALTH PRODUCTS LP Page 1 A/P Remittance Advice Direct Deposit 2020-04-23
Cheque # 9699 Vendor # 0828 HAIN CELESTIAL CANADA, ULC
Invoice # Date Description Gross Disc Net ===================================================================================
218124 2020-02-27 P2151168 2,253.44 .00 2,253.44
219021 2020-03-18 P2152030 35,242.65 .00 35,242.65
219216 2020-03-18 P2152031 8,306.81 .00 8,306.81
CR01BASW 2020-04-20 MULTI MCBS 5,278.05- .00 5,278.05-
DM2004W450 2020-04-17 RETURNS WFM-GR-20589 124.63- .00 124.63-
DM2004W828 2020-04-17 RETURNS WFM-GR-20589 266.09- .00 266.09-
DM20042157 2020-04-07 AVRIL 871.50- .00 871.50-
DM20043798 2020-04-07 COUNTRY GROCER 105.00- .00 105.00-
DM20043892 2020-04-07 COUNTRY GROCER 105.00- .00 105.00-
DM20048663 2020-04-07 AVRIL 871.50- .00 871.50-
DM20049986 2020-04-02 LA MOISSON 258.69- .00 258.69-
========================================== 37,922.44 .00 37,922.44
Printed on 2020-04-23 at 13:13
看看这是否适合你(写在 python(我不知道 .net)
items = [ '225299 2020-07-24 P2156678 7,610.52 .00 7,610.52',
'226384 2020-07-22 P2157104 42,274.76 .00 42,274.76',
'DM20082311 2020-08-14 LIFESTYLE MARKETS NA 201.25- .00 201.25-' ,
'CR01BEPJ 2020-08-17 MULTI MCBS 4,470.06- .00 4,470.06-']
for item in items:
print(list(filter(None,[x.strip(' ') for x in re.findall(r'\d\s([\w\s]+)\s\d',item)])))
输出
['P2156678']
['P2157104']
['LIFESTYLE MARKETS NA']
['MULTI MCBS']
要匹配第一个模式中的所有单词,您可以选择使用字符 class 后跟 1+ 个单词字符 (?:[ -]\w+)*
重复匹配 space 或连字符捕获组。
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+(\w+(?:[ -]\w+)*)
对于 Net
列,您可以扩展第一个模式并匹配 1 个或多个非白色space 字符以进行广泛匹配
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+\w+(?:[ -]\w+)*\s+\S+\s+\S+\s+(\S+)
或者更具体一点,Gross、Disc 和 Net 列匹配 Disc 的点和 2 位数字以及匹配 Gross 和 Net 的点和逗号:
^[A-Z\d]+\s+\d{4}-\d{2}-\d{2}\s+\w+(?:[ -]\w+)*\s+\d{1,3}(?:,\d{3})*\.\d{2}-?\s+\.\d{2}\s+(\d{1,3}(?:,\d{3})*\.\d{2}-?)