re.search () возвращает только 2 группы, но возвращает 5 [дубликаты]

CREATE PROCEDURE `getVal`()
BEGIN
        declare r_len integer;
        declare r_id integer;
        declare r_val varchar(20);
        declare i integer;
        DECLARE found_row int(10);
        DECLARE row CURSOR FOR select length(replace(val,"|","")),id,val from split;
        create table x(id int,name varchar(20));
      open row;
            select FOUND_ROWS() into found_row ;
            read_loop: LOOP
                IF found_row = 0 THEN
                         LEAVE read_loop;
                END IF;
            set i = 1;  
            FETCH row INTO r_len,r_id,r_val;
            label1: LOOP        
                IF i <= r_len THEN
                  insert into x values( r_id,SUBSTRING(replace(r_val,"|",""),i,1));
                  SET i = i + 1;
                  ITERATE label1;
                END IF;
                LEAVE label1;
            END LOOP label1;
            set found_row = found_row - 1;
            END LOOP;
        close row;
        select * from x;
        drop table x;
END
-1
задан intwarrior 17 January 2019 в 03:44
поделиться

1 ответ

В Python re.search() возвращает ТОЛЬКО первое совпадение предложения, и ничего после этого.

Вы должны попробовать re.findall(x) в своем коде.

Всегда помните, что 0-й индекс совпадения (group(0)) возвращает полную строку, которая соответствует, поэтому похоже, что есть два x, но первый фактически является просто строкой, сопоставленной целое регулярное выражение .

Когда вы использовали group(1), был возвращен только текст в первых скобках (), который оказался таким же, как и в group(0).


TL; DR

Используйте re.search() для определения только первого совпадения и используйте re.findall() для извлечения нескольких совпадений.

0
ответ дан Robo Mop 17 January 2019 в 03:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: