以下正则表达式有什么问题?

时间:2018-10-10 14:17:15

标签: python regex regex-group

我必须将以下语句分为三组:

DFFX1 _pcpi_insn_reg_16_  ( .D(n13328), .CK(clk), .Q(pcpi_insn_16_) );
Group1: DFFX1
Group2: _pcpi_insn_reg_16_
Group3:  .D(n13328), .CK(clk), .Q(pcpi_insn_16_) 

我正在使用:(.*) (.*) \((.*)\);

输出为:

Group1: DFFX1 _pcpi_insn_reg_16_
Group2: *empty*
Group3:  .D(n13328), .CK(clk), .Q(pcpi_insn_16_) 

能否请您解释为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

它不起作用,因为默认情况下正则表达式是贪婪的。换句话说,第一个.*将消耗尽可能多的目标文本,然后屈服于第二个文本。您应该使模式更具限制性,以解决此问题。例如:

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_) ')

答案 1 :(得分:0)

可以使Regex的工作更加受限:

'(\w*)\s(\w*)\s\((.*)\)'