Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами) / 8 сообщений из 8, страница 1 из 1
11.09.2020, 13:06
    #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
11.09.2020, 14:09
    #39997644
SY
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
11.09.2020, 14:43
    #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
11.09.2020, 15:42
    #39997683
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
Одним REGEXP_REPLACE не выйдет.

SY.
...
Рейтинг: 0 / 0
11.09.2020, 15:57
    #39997689
SY
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
11.09.2020, 16:03
    #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
11.09.2020, 16:52
    #39997711
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами)
Евгения Зайцева

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

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


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

SY.
...
Рейтинг: 0 / 0
16.09.2020, 12:35
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярка (Вырезать символы новой строки разделенные кавычками и пайпами) / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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