Регулярное выражение для поиска строки ключевого слова и добавления диапазона поиска в качестве нового столбца — Notepad

#regex #notepad

#регулярное выражение #notepad

Вопрос:

Я ищу некоторую помощь для создания регулярного выражения / макроса, который будет выполнен ниже в Notepad :

  1. В верхней части есть раздел. 8-й столбец — ключевое слово для поиска. ПРИМЕР: поисковое слово в строке 1: 3vynfaux5x7f6
  2. Между этими двумя разделами есть много других строк.
  3. Во втором разделе приведены подробные сведения о ключевых словах. Ключевое слово является начальным словом строки в этом разделе.
  4. В соответствующей строке во втором разделе выполните поиск ниже:
    • Текст между [U]:’ ‘[/U] Пример:пользователь1
    • Текст между [D]:»[/D] Пример:report1
    • Текст между [S] [/S] Например:datalayer1
  5. Добавьте каждый приведенный выше текст в качестве нового столбца в первом разделе в соответствующую строку ключевого слова, т.е. 3vynfaux5x7f6
  6. Обратите внимание, что строки второго раздела были сокращены и обозначены ‘very long SQL ~ 5000 символов’, поскольку они слишком длинные.

Заранее большое вам спасибо!

Ниже приведен контент для поиска:

  2   604 BOD9A     SvcAcct_OP 2019-03-20 15:36:51  2019-03-20 17:10:43  >60  3vynfaux5x7f6     8     43,028,307     21,477,582
 1  1423 BOD9A     SvcAcct_OP 2019-03-20 15:27:02  2019-03-20 15:45:17  >120 d943r2yqhrmxb     8     23,474,241     11,727,495
 2   285 BOD9A     SvcAcct_OP 2019-03-20 15:59:39  2019-03-20 17:11:09  >60  2akbrbykkfra8     8     19,728,513      9,685,044
 1  1648 BOD9A     SvcAcct_OP 2019-03-20 16:02:48  2019-03-20 17:11:12  >60  268g625syz3cu     8     15,220,260      5,812,065
 2   537 BOD9A     SvcAcct_OP 2019-03-20 15:49:42  2019-03-20 17:11:05  >60  ftgd185xum5jv     8      9,626,463     11,167,992

<many lines>

02v7k06k2zux6  insert into PRMTR_VAL_TXT AS Twin, PRCS_ID AS AppCode, SUBPRCS_ID AS SubAppCode, MAX_PRCS_TS AS ProcDate from (SELECT DISTINCT <very long SQL ~ 5000 chars>
1dmr7327m1sr6  SELECT /* dynamic_sampling(11)*/  DISTINCT to_char()<very long SQL ~ 5000 chars>
203j3m9tkngyv  select  distinct decode(s.sql_id , null, s.prev_sql_id, s.sql_id ) as sql_id, t.piece, t.sql_text from    gn s, gtex t t where   decode(s.sql_id , null, s.prev_sql_id, s.sql_id) = t .sql_id and             s.username <> ' ' and s.username <> 'BKU CTRL' and s.username <> 'DBSNMP' and s.username <> 'SYS' and          s.sid not in (select sid from ion where qcsid! =sid) order by 1, 2
3vynfaux5x7f6  SELECT   TB_TB_NAME_LINE<very long SQL ~ 5000 chars> /* [TT][U]:'user1'[/U][D]:' report1'[/D][Q]:'BODW9A':'Query 1' :'DPUNI VERS'[/Q][S] datalayer1 [/S][A]'BOB'[/A][/ TT] */

268g625syz3cu  SELECT   TB_NAME_LINE<very long SQL ~ 5000 chars> /* [TT][U]:'user2'[/U][D]:' report2'[/D][Q]:'BODW9A':'Query 1' :'DPUNI VERS'[/Q][S] datalayer2 [/S][A]'BOB'[/A][/ TT] */
29bdpm894vydq  declare   Lines sys.dbms_output.chararr; begin   :NumLines := 10 ;   sys.dbms_output.get_lines(lines => Lines, numlines => :NumLi nes);   if :NumLines > 0 then :Line0 := Lines(1); end if;   if : NumLines > 1 then :Line1 := Lines(2); end if;   if :NumLines > 2  then :Line2 := Lines(3); end if;   if :NumLines > 3 then :Line3  := Lines(4); end if;   if :NumLines > 4 then :Line4 := Lines(5) ; end if;   if :NumLines > 5 then :Line5 := Lines(6); end if; if :NumLines > 6 then :Line6 := Lines(7); end if;   if :NumLines  > 7 then :Line7 := Lines(8); end if;   if :NumLines > 8 then :L ine8 := Lines(9); end if;   if :NumLines > 9 then :Line9 := Line s(10); end if; end;
2abw7qg0jz5mx  SELECT   TB_CHH_ NBR<very long SQL ~ 5000 chars> /* [TT][U]:'user3'[/U][S]datalayer3[/S][A]' BOBJ'[/A][/TT] */
2akbrbykkfra8  SELECT   TB_D_NAME_LINE<very long SQL ~ 5000 chars> /* [TT][U]:'user4'[/U][D]:' report4'[/D][Q]:'TWIN9A':'Query 1' :'DPUNI VERS'[/Q][S] datalayer4 [/S][A]'BOB'[/A][/ TT] */
2ba11aarc5r8r  SELECT   substr(TE_TXT<very long SQL ~ 5000 chars> /* [TT][U]:'user5'[/U][D]:'report5'[/D][Q]:'TWIN9 A':'Query 1 with DepMthy' :'DPUNIVERS'[/Q][S]datalayer5[/S][A]'BOB'[/A][/TT] */
  

Вот окончательный вывод первого раздела:

  2   604 BOD9A     SvcAcct_OP 2019-03-20 15:36:51  2019-03-20 17:10:43  >60  3vynfaux5x7f6     8     43,028,307     21,477,582     user1     report1     datalayer1
 1  1423 BOD9A     SvcAcct_OP 2019-03-20 15:27:02  2019-03-20 15:45:17  >120 d943r2yqhrmxb     8     23,474,241     11,727,495
 2   285 BOD9A     SvcAcct_OP 2019-03-20 15:59:39  2019-03-20 17:11:09  >60  2akbrbykkfra8     8     19,728,513      9,685,044     user4     report4     datalayer4
 1  1648 BOD9A     SvcAcct_OP 2019-03-20 16:02:48  2019-03-20 17:11:12  >60  268g625syz3cu     8     15,220,260      5,812,065     user2     report2     datalayer2
 2   537 BOD9A     SvcAcct_OP 2019-03-20 15:49:42  2019-03-20 17:11:05  >60  ftgd185xum5jv     8      9,626,463     11,167,992
  

Ответ №1:

Попробуйте с этим:

Поиск:

 (b([a-z0-9]{13})b.* )(?=[sS] ^2.*[U]:? '? s*([^[] ?)s*'?[/U].*[D]:? '? s*([^[] ?)s*'?[/D].*[S]:? '? s*([^[] ?)s*'?[/S])
  

Заменить на:

 1     3     4     5
  

Здесь у вас есть демо-версия.

Комментарии:

1. Большое тебе спасибо, Хулио! Когда я попробовал это на реальном тексте, это, похоже, не сработало. Обновлена демонстрационная версия regex101.com/r/FCVn5n/3

2. Напротив, катастрофический откат :)… Я обновил свой ответ. Проверьте еще раз: regex101.com/r/FCVn5n/5