Использование Regex.Replace для безопасного экранирования управляющего символа hl7 - PullRequest
0 голосов
/ 13 февраля 2019

После 2,5 часов попыток создать регулярное выражение, которое заменит символ Caret ^ на \ S \, мое последнее средство - обратиться к сообществу.

Пример сообщения:

OBX|1|SN|test one^example test one||^9||||||F
OBX|2|ST|test two^example test two||Critical||||||F
OBX|3|NM|test three^example test one||80|bpm|||||F
OBX|4|CE|1^Test Recorded||-3^U|ml|||||F
OBX|5|CE|2^Anchor||2^results||||||F

Требование: Каретки в OBX-5 требуют замены на \ S \, но только если это сегмент OBX, а OBX-2 имеет тип значения CE или SN.Причина этого в том, что дизассемблер Biztalk HL7 не может обрабатывать каретки в OBX-5, так как он недостаточно умен, чтобы знать, что если OBX-2 имеет тип значения CE или SN, то OBX-5 имеет подтипы.

Смотрите здесь: https://social.msdn.microsoft.com/Forums/en-US/3b73edde-575c-42c8-91ed-a9957f7b6d4f/biztalk-hl7-variable-datatypes-ex-obx5?forum=biztalkgeneral

Самое близкое, что я получил, это регулярное выражение: (?<=((OBX(\|))\d{1,4}(\|)(SN|CE)(\|)(((.+?)\|)(\|))))((\^))

Однако это не работает, так как мне нужно ограничить его OBX-5 только, и не работает для персонажей перед кареткой.

Извиняюсь за длинный пост!Ценю любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 13 февраля 2019

В аналогичных ситуациях с несогласованными плоскими файлами ...

Я бы использовал пользовательский конвейерный компонент, который считывает поток «строка» за «строкой» и вносит все необходимые изменения.

...