猿问

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

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


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

你能解释一下为什么这不起作用吗?


慕田峪9158850
浏览 168回答 2
2回答

慕桂英3389331

它不起作用,因为默认情况下正则表达式是贪婪的。换句话说,.*在屈服于第二个之前,第一个将尽可能多地消耗目标文本。您应该使您的模式更具限制性以解决此问题。例如:import repattern = 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_) ')

慕雪6442864

正则表达式可以更严格地工作:'(\w*)\s(\w*)\s\((.*)\)'
随时随地看视频慕课网APP

相关分类

Python
我要回答