powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
8 сообщений из 8, страница 1 из 1
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997615
Привет всем !
Ребят подскажите пожалуйста как в регулярном выражении можно убрать символы новой строки только внутри двойных кавычек разделенных пайпами....
Я пробовала так:
Код: plsql
1.
2.
3.
select REGEXP_REPLACE('this is a |"HA"||"HI_FRIE
ND"| |"HI_FRIEND" test to repl
ace','(['||(chr(13)||chr(10))||']+)', '@@') from dual


Результат: this is a |"HA"||"HI_FRIE@@ND"| |"HI_FRIEND" test to repl@@ace
но у меня заменяеться везде =(
Как в регулярке можно указать что заменять только внутри пайпов и двойных кавычек?
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997644
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH T AS (SELECT 'this is a |"HA"||"HI_FRIE
ND"| |"HI_FRIEND" test to repl
ace' STR FROM DUAL)
SELECT  STR,
        REGEXP_REPLACE(STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)', '\1@@\2') NEW_STR
  FROM  T
/

STR                            NEW_STR
------------------------------ ------------------------------------------------------------
this is a |"HA"||"HI_FRIE      this is a |"HA"||"HI_FRIE@@ND"| |"HI_FRIEND" test to repl
ND"| |"HI_FRIEND" test to repl ace
ace

SQL>



SY.
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997656
SY
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH T AS (SELECT 'this is a |"HA"||"HI_FRIE
ND"| |"HI_FRIEND" test to repl
ace' STR FROM DUAL)
SELECT  STR,
        REGEXP_REPLACE(STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)', '\1@@\2') NEW_STR
  FROM  T
/

STR                            NEW_STR
------------------------------ ------------------------------------------------------------
this is a |"HA"||"HI_FRIE      this is a |"HA"||"HI_FRIE@@ND"| |"HI_FRIEND" test to repl
ND"| |"HI_FRIEND" test to repl ace
ace

SQL>



SY.

Спасибо большое !!! но я все еще не могу понять что когда внутри строки разделенной пайпами будет больше > 1 переноса? я так поняла что мы меняем только один перенос .. и как в регулярке указать чтобы заменялись все?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
WITH T AS (SELECT 'this is a |"HA"||"HI_FRIE
ND"| |"HI_F
RIEN
D"| test to repl
ace' STR FROM DUAL)
SELECT  STR,
        REGEXP_REPLACE(STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)', '\1@@\2') NEW_STR
  FROM  T


Результат
Код: plsql
1.
2.
3.
this is a |"HA"||"HI_FRIE@@ND"| |"HI_F
RIEN@@D"| test to repl
ace
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997683
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одним REGEXP_REPLACE не выйдет.

SY.
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997689
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
REGEXP_REPLACE + recursive subquery factoring:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
WITH T AS (SELECT 'this is a |"HA"||"HI_FRIE
ND"| |"HI_F
RIEN
D"| test to repl
ace' STR FROM DUAL),
R(STR,NEW_STR) AS (
                    SELECT  STR,
                            REGEXP_REPLACE(STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)', '\1@@\2') NEW_STR
                      FROM  T
                   UNION ALL
                    SELECT  STR,
                            REGEXP_REPLACE(NEW_STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)', '\1@@\2') NEW_STR
                      FROM  R
                      WHERE REGEXP_LIKE(NEW_STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)')
                  )
SELECT  STR,
        NEW_STR
  FROM  R
  WHERE NOT REGEXP_LIKE(NEW_STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|)')
/

STR                                 NEW_STR
----------------------------------- -----------------------------------------------------------------
this is a |"HA"||"HI_FRIE           this is a |"HA"||"HI_FRIE@@ND"| |"HI_F@@RIEN@@D"| test to repl
ND"| |"HI_F                         ace
RIEN
D"| test to repl
ace

SQL>



SY.
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997694
SY
Одним REGEXP_REPLACE не выйдет.

SY.

хм это я так понимаю в цикле покрутить что то типа такого?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
WITH T AS (SELECT 'this is a |"HA"||"HI_FRIE
ND"| |"HI_F
RIEN
D"| test to repl
ace' STR FROM DUAL)
SELECT  STR,
        REGEXP_REPLACE(REGEXP_REPLACE(STR,'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|+)', '\1@@\2'),'(\|"[^|"]*)' || CHR(10) || '([^|"]*"\|+)', '\1@@\2') NEW_STR
  FROM  T


Как вариант в цикле можно динамически генерить REGEXP_REPLACE и через execute immediate выполнять =) Но я еще не понимаю как мне определить сколько раз этот цикл должен выполняться=) Можно ли подсчитать сколько в строке разделенной пайпами и кавычками знаков переноса строки?
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39997711
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгения Зайцева

хм это я так понимаю в цикле покрутить что то типа такого?

Как вариант в цикле можно динамически генерить REGEXP_REPLACE и через execute immediate выполнять =) Но я еще не понимаю как мне определить сколько раз этот цикл должен выполняться=) Можно ли подсчитать сколько в строке разделенной пайпами и кавычками знаков переноса строки?


Я уже показал как "циклить" через recursive subquery factoring.

SY.
...
Рейтинг: 0 / 0
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
    #39999287
Спасибо большое за помощь ! Надо больше знать в регулярках это сила )
Я реализовала это через PL/SQL цикл так как в subquery factoring в 11g есть ограничение на длину символов в колонке (Длина если я не ошибаюсь равна 4000б)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
  declare
   l_csv_clob CLOB;
  begin
  loop
     exit when (REGEXP_INSTR(l_csv_clob,'(\|"[^|"]*)' ||chr(13)||chr(10) || '([^|"]*"\|+)', 1, 1) = 0);
     l_csv_clob := REGEXP_REPLACE(l_csv_clob,'(\|"[^|"]*)' || chr(13)||chr(10) || '([^|"]*"\|+)', '\1'||chr(10)||'\2');
  end loop;
 end;


Еще раз спасибо большое за помощь )
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]