Я пытаюсь разбить строку, имеющую два составных и вложенных разделителя:
- Уровень 1:
~|
- Уровень 2:
^|
Проблема в том, что шаблон регулярного выражения работает с одним разделителем, таким как: ~
или |
, или он также работает с составным разделителем, таким как ~~
или ^^
, но он не работает свышеуказанные разделители.
Целевая строка:
*~~36415^^Description^^Version-4~~70450^^Description2^^Version-4~~73110^^Description3^^Version-4~~73140*
Используемое регулярное выражение: * [^(~|)]*
* [^(~\|)]*
* ((?!((~)(\|))).)
* (?!(~\|).)
Но это не такт работа.Однако, когда я изменил свою Target String на:
36415^^MRI Orbit, Face, Neck W W/O Contrast^^CPT-4~~70450^^MRI Orbit, Face, Neck W W/O Contrast^^CPT-4~~73110^^MRI Orbit, Face, Neck W W/O Contrast^^CPT-4~~73140
и использую регулярное выражение: * [^(~~)]*
* [^(^^)]*
, это работает.
PS: я используюhttps://regex101.com/r/Stbwxt/1, чтобы проверить это.
WITH String_splits AS (
SELECT TRIM(',' FROM REGEXP_SUBSTR('~|36415^|Description^|Version-4~|70450^|Description2^|Version-4~|73110^|Description3^|Version-4~|73140', '[^(~|)]*', 1, LEVEL)) String_splits_1
, TRIM(',' FROM REGEXP_SUBSTR('~|36415^|Description^|Version-4~|70450^|Description2^|Version-4~|73110^|Description3^|Version-4~|73140', '[^(~|)]*', 3, LEVEL)) String_splits_2
FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT('~|36415^|Description^|Version-4~|70450^|Description2^|Version-4~|73110^|Description3^|Version-4~|73140', '[^(~|)]*')
)
SELECT String_splits_1
, String_splits_2
FROM String_splits;