Python 下面的正则表达式有什么问题?
我必须将以下陈述分为三组: 我正在使用:.*.*.\ 输出为:Python 下面的正则表达式有什么问题?,python,regex,regex-group,Python,Regex,Regex Group,我必须将以下陈述分为三组: 我正在使用:.*.*.\ 输出为: Group1: DFFX1 _pcpi_insn_reg_16_ Group2: *empty* Group3: .D(n13328), .CK(clk), .Q(pcpi_insn_16_) 你能解释一下为什么这不起作用吗?它不起作用,因为默认情况下正则表达式是贪婪的。换句话说,第一个。*将消耗尽可能多的目标文本,然后再使用第二个。您应该使您的模式更具限制性,以说明这一点。例如: import re pattern = r
Group1: DFFX1 _pcpi_insn_reg_16_
Group2: *empty*
Group3: .D(n13328), .CK(clk), .Q(pcpi_insn_16_)
你能解释一下为什么这不起作用吗?它不起作用,因为默认情况下正则表达式是贪婪的。换句话说,第一个。*将消耗尽可能多的目标文本,然后再使用第二个。您应该使您的模式更具限制性,以说明这一点。例如:
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_) ')
正则表达式可以对工作进行更严格的限制:
'(\w*)\s(\w*)\s\((.*)\)'
我在这里进行了测试:您的正则表达式工作正常,因此您的问题可能在代码的其他地方。请添加更多链接到此正则表达式的代码/上下文。@SvenHakvoort我已经更新了问题。由于示例位于引号块中,_pcpi_insn_reg_16_和之间的双空格不可见。要解析的文本现在位于代码块中,以防止删除双空格。
('DFFX1', '_pcpi_insn_reg_16_', ' .D(n13328), .CK(clk), .Q(pcpi_insn_16_) ')
'(\w*)\s(\w*)\s\((.*)\)'