使用正则表达式在 MATLAB 中查找重复出现的模式

Using regexp to find a reoccurring pattern in MATLAB

 input = ' 12Z taj 20501 jfdjda OCNL jtjajd ptpa 23Z jfdakdkf tjajdfk OCNL fdkadja 02Z fdjafsdk fkdsafk OCNL fdkafk dksakj = '

使用正则表达式

regexp(input,'\s\d{2,4}Z\s.*(OCNL)','match')

我正在尝试获取输出

[1,1] = 12Z taj 20501 jfdjda OCNL jtjajd ptpa

[1,2] = 23Z jfdakdkf tjajdfk OCNL fdkadja

[1,3] = 02Z fdjafsdk fkdsafk OCNL fdkafk dksakj

您可以使用

(?<!\S)\d{2,4}Z\s+.*?\S(?=\s\d{2,4}Z\s|\s*=\s*$)

参见regex demo

详情

  • (?<!\S) - 当前位置左侧必须有空格或字符串开头
  • \d{2,4} - 2、3 或 4 位数字
  • Z - Z 字母
  • \s+ - 1+ 个空格
  • .*?\S - 尽可能少的任何零个或多个字符,然后是非空格
  • (?=\s\d{2,4}Z\s|\s*=\s*$) - 当前位置右侧必须有两种模式之一:
    • \s\d{2,4}Z\s - 一个空格,2、3 或 4 个数字,Z 和一个空格
    • | - 或
    • \s*=\s*$ - = 在字符串末尾包含 0+ 个空白字符。