我必须将以下语句分为 3 组:DFFX1 _pcpi_insn_reg_16_ ( .D(n13328), .CK(clk), .Q(pcpi_insn_16_) );Group1: DFFX1Group2: _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 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
它不起作用,因为默认情况下正则表达式是贪婪的。换句话说,.*在屈服于第二个之前,第一个将尽可能多地消耗目标文本。您应该使您的模式更具限制性以解决此问题。例如:
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_) ')
添加回答
举报
0/150
提交
取消