正则分组捕获不同文本类型以构建DataFrame的问题求助
正则分组捕获问题求助
场景说明
我正在编写代码,通过正则分组捕获不同变量值以构建DataFrame,已将每条数据拆分为独立文本字符串,共包含四种类型:
类型示例
- Type 1:
10 129000 TEMPORARY RAILING (TYPE K) LF 960 27.50 26,400.00
- Type 2:
18 (F) 510502 MINOR CONCRETE (MINOR STRUCTURE) LUMP SUM 4 2,740.00 10,960.00
- Type 3:
21 839312 DOUBLE THRIE BEAM BARRIER (STEEL POST) LF 21,600 33.35 720,360.00
- Type 4:
15 156585 18" CURED-IN-PLACE PIPE LINER EA 1 300.00 300.00
目标DataFrame结构
| v1 | v2 | v3 | v4 | v5 | v6 |
|---|---|---|---|---|---|
| 10 | 129000 | TEMPORARY RAILING (TYPE K) | LF | 960 | 27.50 |
| 18 | 510502 | MINOR CONCRETE (MINOR STRUCTURE) | LUMP SUM | 4 | 2,740.00 |
| 21 | 839312 | DOUBLE THRIE BEAM BARRIER (STEEL POST) | LF | 21,600 | 33.35 |
当前正则及捕获情况
当前使用的正则模式:
^(\s{6}|\s{7})(\d+)\s+(?!(F))(\d+)\s+([A-Z.+]\s\w+[^\n\d]*)((?:^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[0-9])?)(?!\S))\s+((?:^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[0-9])?)(?!\S))\s+((?:^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[0-9])?)(?!\S))
捕获结果:
- Text 1:
group 2: 10;group 4: 129000;group 5: TEMPORARY RAILING (TYPE K) LF;group 7: 960;group 9: 27.50;group 11: 26,400.00 - Text 2:因存在
(F)无法捕获,考虑在正则匹配前移除该内容 - Text 3:
group 2: 21;group 4: 839312;group 5: DOUBLE THRIE BEAM BARRIER (STEEL POST) LF;group 7: 21,600;group 9: 33.35;group 11: 720,360.00 - Text 4:因
18"无法捕获
疑问
- 能否让group 5 (
([A-Z.+]\s\w+[^\n\d]*))在遇到第一个连续两个空格时停止捕获? - 能否在捕获group 2 (
(\d+))后添加对(F)和(S)的负向预查?
内容的提问来源于stack exchange,提问作者Pepa
相关产品推荐
相关产品推荐

