Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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_Python 2.7_Python 3.x - Fatal编程技术网

具有多个组的python正则表达式子模式中优先的空字符串

具有多个组的python正则表达式子模式中优先的空字符串,python,regex,python-2.7,python-3.x,Python,Regex,Python 2.7,Python 3.x,据我所知,|交替尝试不同的子模式,并匹配第一个可能的选项。每当有多个组时,当其中一个子模式为空并赋予其优先级时,后面的组会意外地行为 示例:re.search(((ab | a |).*(as | a |).*(qwe | qw |);“abcde asdfg qwerty”).groups()返回:('ab','') 如果删除空选项re.search(((ab | a |).*(qwe | qw)”,“abcde asdfg qwerty”).groups()结果是('ab','as','qw

据我所知,
|
交替尝试不同的子模式,并匹配第一个可能的选项。每当有多个组时,当其中一个子模式为空并赋予其优先级时,后面的组会意外地行为

示例:
re.search(((ab | a |).*(as | a |).*(qwe | qw |);“abcde asdfg qwerty”).groups()
返回:
('ab','')

如果删除空选项
re.search(((ab | a |).*(qwe | qw)”,“abcde asdfg qwerty”).groups()
结果是
('ab','as','qwe')

我对实现第二个结果的方法感兴趣,能够匹配像
abc qwerty
这样的字符串,并获得
('ab','qwe')
abc asd
,并获得
('ab','as','','')


关于为什么这些模式没有像我预期的那样工作的解释将受到赞赏,但这不是我主要关心的问题。提前谢谢

你得到中间群体的原因是
*
贪婪。它会看到字符串中的所有字符并使用它们

你可能想要这样的东西:

(ab | a |).*(as | a |).*(qwe | qw |)


如果你能准确地发布你需要的东西,可能会更有帮助。我不确定这可能是什么用例,也不确定是否有更好的方法来编写这个正则表达式。

得到中间组的原因是
*
是贪婪的。它会看到字符串中的所有字符并使用它们

你可能想要这样的东西:

(ab | a |).*(as | a |).*(qwe | qw |)


如果你能准确地发布你需要的东西,可能会更有帮助。我不确定这可能是什么用例,也不确定是否有更好的方法来编写这个正则表达式。

得到中间组的原因是
*
是贪婪的。它会看到字符串中的所有字符并使用它们

你可能想要这样的东西:

(ab | a |).*(as | a |).*(qwe | qw |)


如果你能准确地发布你需要的东西,可能会更有帮助。我不确定这可能是什么用例,也不确定是否有更好的方法来编写这个正则表达式。

得到中间组的原因是
*
是贪婪的。它会看到字符串中的所有字符并使用它们

你可能想要这样的东西:

(ab | a |).*(as | a |).*(qwe | qw |)


如果你能准确地发布你需要的东西,可能会更有帮助。我不确定这可能是什么用例,也不确定是否有更好的方法来编写正则表达式。

您的问题的原因是贪婪和空令牌的结合。原因是当模式开始时,它会很高兴地匹配字符串开头的
ab
。因此,第一个标记已满足。现在下一个标记是贪心点。这将消耗目标字符串中的所有剩余字符。这满足了这个标记。下一个标记是替代标记。由于贪心点的存在,前两个选项都无法匹配,因为您位于目标字符串的末尾。但是,空令牌可以很容易地匹配。这让整个团队都感到满意。下一个标记是另一个贪婪的点。但是,此点要求任何字符的出现次数为零或更多。由于您位于字符串的末尾(因为第一个贪心点),所以这个标记非常满意。最后一个标记的行为和结果与前面描述的组相同。因此,最后一个代币也很满足。

问题的原因是贪婪和空代币的结合。原因是当模式开始时,它会很高兴地匹配字符串开头的
ab
。因此,第一个标记已满足。现在下一个标记是贪心点。这将消耗目标字符串中的所有剩余字符。这满足了这个标记。下一个标记是替代标记。由于贪心点的存在,前两个选项都无法匹配,因为您位于目标字符串的末尾。但是,空令牌可以很容易地匹配。这让整个团队都感到满意。下一个标记是另一个贪婪的点。但是,此点要求任何字符的出现次数为零或更多。由于您位于字符串的末尾(因为第一个贪心点),所以这个标记非常满意。最后一个标记的行为和结果与前面描述的组相同。因此,最后一个代币也很满足。

问题的原因是贪婪和空代币的结合。原因是当模式开始时,它会很高兴地匹配字符串开头的
ab
。因此,第一个标记已满足。现在下一个标记是贪心点。这将消耗目标字符串中的所有剩余字符。这满足了这个标记。下一个标记是替代标记。由于贪心点的存在,前两个选项都无法匹配,因为您位于目标字符串的末尾。但是,空令牌可以很容易地匹配。这让整个团队都感到满意。下一个标记是另一个贪婪的点。但是,此点要求任何字符的出现次数为零或更多。由于您位于字符串的末尾(因为第一个贪心点),所以这个标记非常满意。最后一个标记的行为和结果与前面描述的组相同。因此,最后一个代币也很满足。

问题的原因是贪婪和空代币的结合。原因是当模式开始时,它会很高兴地匹配字符串开头的
ab
。因此,第一个标记已满足。现在下一个标记是贪心点。这将消耗目标字符串中的所有剩余字符。这令人满意
re.match('^(ab|a|)\w*\s*(?:(as|a)\w*|)\w*?\s*(qwe|qw|)',s) #s is your string
>>> s = 'abasdf asdf qwert'
>>> re.match('^(ab|a|)\w*\s*(?:(as|a)\w*|)\w*?\s*(qwe|qw|)',s).groups()
('ab', 'as', 'qwe')
>>> s = 'abab asf qwert'
>>> re.match('^(ab|a|)\w*\s*(?:(as|a)\w*|)\w*?\s*(qwe|qw|)',s).groups()
('ab', 'as', 'qwe')
>>> s = 'abab qwert'
>>> re.match('^(ab|a|)\w*\s*(?:(as|a)\w*|)\w*?\s*(qwe|qw|)',s).groups()
('ab', None, 'qwe')
>>> s = 'abab asfq'
>>> re.match('^(ab|a|)\w*\s*(?:(as|a)\w*|)\w*?\s*(qwe|qw|)',s).groups()
('ab', 'as', '')