Regex:从嵌套捕获组中修剪空白



我想使用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个捕获组:

  1. johndoe
  2. gmail
  3. com

RegEx分解:

  • ^:启动
  • s*:匹配0或空白
  • ([w/.!#$%&'*+=?^{|}~-]+(`:匹配捕获组#1中的这些字符中的1+个
  • s*:匹配0或空白
  • @:匹配@
  • s*:匹配0或空白
  • ([w-]+):匹配捕获组#2中的单词字符或连字符的1+
  • s*:匹配0或空白
  • .:匹配一个点
  • s*:匹配0或空白
  • (w{2,}):匹配捕获组#3中的2个以上单词字符
  • s*:匹配0或空白
  • $:结束

最新更新