Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 下面的正则表达式有什么问题?_Python_Regex_Regex Group - Fatal编程技术网

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\((.*)\)'