首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:从嵌套捕获组中修剪空白空间

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

Stack Overflow用户
提问于 2022-10-11 14:29:58
回答 2查看 46关注 0票数 1

我想使用Regex(Python)将以下类型的电子邮件地址解析为三个捕获组:

代码语言:javascript
复制
        johndoe        @      gmail      .  com

这三个抓捕组是:

  • 局部部分(johndoe);
  • 全域无白空间(gmail.com);
  • 没有withspaces(gmail).的域名

这是我写的正则表达式:

代码语言:javascript
复制
^([\w\s\-\/.!#$%&'*+=?^_`{|}~]+)@(([\s\w+]+)\.[\w\s]{2,})$

其中:

  • 第一部分(([\w\s\-\/.!#$%&'*+=?^_`{|}~]+))捕捉局部部分;
  • 第二部分((([\s\w+]+)\.[\w\s]{2,}))以两个组捕获整个域和域名。

表达式有效,但问题是第二和第三捕获组都有尾随空格,即:

  • 第1组:johndoe
  • 第2组:gmail . com
  • 第3组:gmail

有没有一种方法可以从嵌套捕获组中剪短空白空间?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-11 14:46:47

如果要在第2组中捕获第3组,就不能避免捕获其中的空白。

那么,为什么不用外部的空格捕获三个独立的组,然后根据需要加入$2\.$3呢?

代码语言:javascript
复制
^\s*?([\w\-\/.!#$%&'*+=?^_`{|}~]+)\s*?@\s*?([\w+]+)\s*?\.\s*?([\w]{2,})$

https://regex101.com/r/G1FvZV/1

票数 3
EN

Stack Overflow用户

发布于 2022-10-11 15:40:57

我建议您将\s保留在字符类之外,以便分别匹配3部分,然后在您的python代码中分别连接第2和第3捕获组。

代码语言:javascript
复制
^\s*([\w/.!#$%&'*+=?^`{|}~-]+)\s*@\s*([\w-]+)\s*\.\s*(\w{2,})\s*$

RegEx演示

这将分别给出三个捕获组:

  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或空白空间
  • $:结束
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74029832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档