Вы можете использовать следующее выражение:
^(?=(?:[^,]+,){14}).*$
^
Начало строки. (?=
Положительный прогноз. (?:[^,]+,){14}
Группа без захвата.Соответствует всему, что не является запятой, за которой следует запятая.Группа без захвата сопоставляется 14 раз. )
Завершает поиск. .*
Совпадение с чем-либо жадно. $
Утверждение конца строки.
Regexдемо здесь .
MATLAB демо:
Первая строка:
>> str = '$PINS2,234572.485,2017,1493375479,65616,0.6356,-0.0113,-0.0411,-0.7709,-0.119,-0.071,0.030,34.19859875,-118.16703693,297.113*2b'
>> regexp(str,'^(?=(?:[^,]+,){14}).*$','match')
ans =
1×1 cell array
{'$PINS2,234572.485,2017,1493375479,65616,0.6356,-0.0113,-0.0411,-0.7709,-0.119,-0.071,0.030,34.19859875,-118.16703693,297.113*2b'}
Вторая строка:
>> str = '$PINS2,234572.677,2017,14933,-0.255,-0.534,-9.671*25'
>> regexp(str,'^(?=(?:[^,]+,){14}).*$','match')
ans =
0×0 empty cell array
В качестве альтернативы, вы можете просто проверить, сколько запятых есть в строке и отфильтровать соответственно:
>> str = '$PINS2,234572.485,2017,1493375479,65616,0.6356,-0.0113,-0.0411,-0.7709,-0.119,-0.071,0.030,34.19859875,-118.16703693,297.113*2b'
>> nnz(str == ',')
ans =
14