Данные:
N15319542045C13_1_3/61488007C13-130083_1_3/61488007C13-130083-1_1_3/P1197443641_1_3SD|1
NP1196939393_1_3SU|OD=2/7;|BNP1196939393_1_3SU|OD=2/7;|BNP1196930222_1_3SU|OD=4/11;|
NP1196930222_1_3SU|OD=4/11;|
N15319384625C13_1_3/61445794C13-130077_1_3SD||BN15319384625C13_1_3/61445794C13-130077_1_3SD||
RegExp:
(N(.*?)S([UID])\|(.*?))(?:B|\|.?$)
Я пытаюсь найти 7 совпадений, используя приведенное выше регулярное выражение, но только 6 совпадают. Не уверен, как исправить, чтобы соответствовать 1-й линии, а также.
Формат:
N(key)S(action)|(value or end)
конец зависит от разных совпадений
Я решил это, если кому-то еще нужно:
(\x15(.*?)\x01([UID])\|(.*?))(?:.*?\x08|.*\|?$)
Регулярное выражение не работает, потому что после S[UID]
вы ожидаете 2 |
согласно регулярному выражению, но в первой входной строке есть только один.
Одно из исправлений — сделать вторую группу необязательной и убрать привязку конца строки $
(N(.*?)S([UID])\|(.*?))(?:B|\|.?)?$
Или может быть проще как
N.*?S[UID]\|.*$
Других решений пока нет …