Это не работает, потому что по умолчанию регулярные выражения являются жадными.Другими словами, первый .*
будет потреблять столько целевого текста, сколько может, прежде чем уступить второму.Вы должны сделать свой шаблон более ограничительным, чтобы учесть это.Например:
import re
pattern = r'([\S]+) ([\S]+) \((.*)\)'
text = 'DFFX1 _pcpi_insn_reg_16_ ( .D(n13328), .CK(clk), .Q(pcpi_insn_16_) );'
m = re.match(pattern, text)
print m.groups()
Вместо сопоставления с любым символом, это соответствует только символам, которые не являются пробельными символами (это то, что делает \S
).Это напечатает эти группы:
('DFFX1', '_pcpi_insn_reg_16_', ' .D(n13328), .CK(clk), .Q(pcpi_insn_16_) ')