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
В Python re.search()
возвращает ТОЛЬКО первое совпадение предложения, и ничего после этого.
Вы должны попробовать re.findall(x)
в своем коде.
Всегда помните, что 0-й индекс совпадения (group(0)
) возвращает полную строку, которая соответствует, поэтому похоже, что есть два x
, но первый фактически является просто строкой, сопоставленной целое регулярное выражение .
Когда вы использовали group(1)
, был возвращен только текст в первых скобках ()
, который оказался таким же, как и в group(0)
.
TL; DR
Используйте re.search()
для определения только первого совпадения и используйте re.findall()
для извлечения нескольких совпадений.