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

2024-07-05 12:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须将以下语句分为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_) 

你能解释一下为什么这样不行吗?你知道吗


Tags: 语句regemptyckclkgroup1group3group2
2条回答

它不起作用,因为默认情况下正则表达式是贪婪的。换言之,第一个.*将消耗尽可能多的目标文本,然后再转换到第二个。你应该使你的模式更加严格来解释这一点。例如:

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

Regex可以对工作进行更严格的限制:

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

相关问题 更多 >