在匹配电子邮件地址时,在匹配类似yasar@webmail之类的东西之后,我想捕获一个或多个(\.\w+)(我所做的事情有些复杂,这只是一个例子),我尝试添加(。 \ w +)+,但仅捕获最后一个匹配项。例如,[email protected]匹配,但在.tr部分之后仅包含yasar@webmail,因此我丢失了.something.edu组。我可以在Python正则表达式中执行此操作,还是建议您先匹配所有内容,然后再拆分子模式?

最佳答案

re模块不支持重复捕获(regex支持):

>>> m = regex.match(r'([.\w]+)@((\w+)(\.\w+)+)', '[email protected]')
>>> m.groups()
('yasar', 'webmail.something.edu.tr', 'webmail', '.tr')
>>> m.captures(4)
['.something', '.edu', '.tr']


在您的情况下,我将在以后拆分重复的子模式。它导致了一个简单易读的代码,例如,参见@Li-aung Yip's answer中的代码。

关于python - 在Python正则表达式中捕获重复的子模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58957340/

10-12 23:25