【问题标题】:RegEx Group by Fixed Length固定长度的正则表达式组
【发布时间】:2022-09-23 08:36:02
【问题描述】:

样本输入:

19GMC TRNLLBLK
98CHY TK   GRN
02TOYO   4DWHI
21LAND     BLK

为了帮助了解我正在尝试做的事情:

19|GMC |TRN|LL|BLK
98|CHY |TK |  |GRN
02|TOYO|   |4D|WHI
21|LAND|   |  |BLK

列:

  1. 总是两位数
  2. 总是 3 个字母后跟一个空格或 4 个字母
  3. 始终全部为空格,2 个字母后跟一个空格或 3 个字母
  4. 总是全部为空格或两个字符
  5. 总是全部为空格或三个字母

    我正在尝试使用 RegEx 选择每个“列”中的非空白字符。

    非白色字符将成为组的一部分(每列一个)。

    白色字符将是未选定组的一部分。

    (?<DIG>\\d{2})(?<MKE>\\S{3,4})
    

    我无法弄清楚如何创建一个未选择的组来计算要选择多少空格以防止进入“下一列”。

  • 您使用的是哪种正则表达式引擎/编程语言?
  • 在您的组内使用交替|,如a|b
  • 我正在使用 VB.Net
  • 如果列总是固定宽度,那么您可能想要使用Substring 函数。

标签: regex


【解决方案1】:

您可以使用 5 个捕获组:

^(\d{2})([A-Z]{3}[A-Z ])([A-Z]{2}[A-Z ]| +)([A-Z0-9]{2}| +)([A-Z]{3}| +)$

解释

  • ^ 字符串开头
  • (\d{2}) 组 1,匹配 2 位数字
  • ([A-Z]{3}[A-Z ]) 第 2 组,匹配 3 个字符 A-Z 和一个字符 A-Z 或一个空格
  • ([A-Z]{2}[A-Z ]| +) 第 3 组,匹配 2 个字符 A-Z 和一个字符 A-Z 或一个空格或仅空格
  • ([A-Z0-9]{2}| +) 第 4 组,匹配 2 个字符 A-Z 或 0-9 或仅匹配空格
  • ([A-Z]{3}| +) 第 5 组,匹配 3 个字符 A-Z 或仅空格
  • $ 字符串结束

请参阅regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多