我必须将以下语句分为三组:
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_)
能否请您解释为什么这不起作用?
答案 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\((.*)\)'