为了账号安全,请及时绑定邮箱和手机立即绑定

捕获Python正则表达式中的重复子模式

/ 猿问

捕获Python正则表达式中的重复子模式

婷婷同学_ 2019-07-17 18:46:07

捕获Python正则表达式中的重复子模式

在匹配电子邮件地址时,在我匹配以下内容之后yasar@webmail,我想捕获一个或多个(\.\w+)(我正在做的事情有点复杂,这只是一个例子),我尝试添加(.\W+)+,但它只捕获了最后一次匹配。例如,yasar@webmail.something.edu.tr匹配但只包括.tryasar@webmail所以我输了.something.edu团体。我可以在Python正则表达式中这样做吗?或者,您会建议首先匹配所有内容,然后再拆分子模式吗?



查看完整描述

3 回答

?
白衣染霜花

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

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

在您的例子中,我将在稍后拆分重复的子模式。这将导致一个简单的、可读的代码,例如,请参阅@李昂叶先生的答覆.


查看完整回答
反对 回复 2019-07-17
?
qq_花开花谢_0

这将起作用:

>>> regexp = r"[\w\.]+@(\w+)(\.\w+)?(\.\w+)?(\.\w+)?(\.\w+)?(\.\w+)?">>> email_address = "william.adama@galactica.caprica.fleet.mil">>> m = re.match(regexp, email_address)>>> m.groups()('galactica', '.caprica', '.fleet', '.mil', None, None)

但它仅限于最多六个子组。更好的办法是:

>>> m = re.match(r"[\w\.]+@(.+)", email_address)>>> m.groups()('galactica.caprica.fleet.mil',)>>> m.group(1).split('.')['galactica', 'caprica', 'fleet', 'mil']

请注意,只要电子邮件地址很简单,regexp就可以了-但是有各种各样的东西会被破坏。看见这个问题有关电子邮件地址正则表达式的详细处理。


查看完整回答
反对 回复 2019-07-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信