我想使用Regex(Python(将以下类型的电子邮件地址解析为三个捕获组:
johndoe @ gmail . com
三个捕获组是:
- 局部部分(
johndoe
( - 整个域没有空格(
gmail.com
( - 不带空格的域名(
gmail
(
这是我写的正则表达式:
^([ws-/.!#$%&'*+=?^_`{|}~]+)@(([sw+]+).[ws]{2,})$
其中:
- 第一部分(
([ws-/.!#$%&'*+=?^_`{|}~]+)
(捕获本地部分 - 第二部分(
(([sw+]+).[ws]{2,})
(以两个捕获组捕获整个域和域名
表达式有效,但问题是第二和第三捕获组都有尾随空白,即:
- 第1组:
johndoe
- 第2组:
gmail . com
- 第3组:
gmail
有没有办法从嵌套捕获组中修剪空白?
如果你想在第2组中捕获第3组,你就无法避免捕获其中的空白。
所以,为什么不捕获三个外部带有空白的独立组,然后根据需要加入$2.$3
呢?
^s*?([w-/.!#$%&'*+=?^_`{|}~]+)s*?@s*?([w+]+)s*?.s*?([w]{2,})$
https://regex101.com/r/G1FvZV/1
我建议您将s
保留在角色类之外,以便分别匹配3个部分,然后根据需要在python代码中分别连接第二个和第三个捕获组。
^s*([w/.!#$%&'*+=?^`{|}~-]+)s*@s*([w-]+)s*.s*(w{2,})s*$
RegEx演示
这将分别提供3个捕获组:
johndoe
gmail
com
RegEx分解:
^
:启动s*
:匹配0或空白([w/.!#$%&'*+=?^
{|}~-]+(`:匹配捕获组#1中的这些字符中的1+个s*
:匹配0或空白@
:匹配@
s*
:匹配0或空白([w-]+)
:匹配捕获组#2中的单词字符或连字符的1+s*
:匹配0或空白.
:匹配一个点s*
:匹配0或空白(w{2,})
:匹配捕获组#3中的2个以上单词字符s*
:匹配0或空白$
:结束