You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则分组捕获不同文本类型以构建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结构

v1v2v3v4v5v6
10129000TEMPORARY RAILING (TYPE K)LF96027.50
18510502MINOR CONCRETE (MINOR STRUCTURE)LUMP SUM42,740.00
21839312DOUBLE THRIE BEAM BARRIER (STEEL POST)LF21,60033.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"无法捕获

疑问

  1. 能否让group 5 (([A-Z.+]\s\w+[^\n\d]*))在遇到第一个连续两个空格时停止捕获?
  2. 能否在捕获group 2 ((\d+))后添加对(F)和(S)的负向预查?

内容的提问来源于stack exchange,提问作者Pepa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:11:18