仅返回正则表达式中具有 OR 条件的一组

问题描述 投票:0回答:2

我必须编写一个正则表达式来从句子中获取电子邮件地址。我希望仅将其与第 1 组一起退回。

正则表达式:

\[mailto:(.+)\]|<(.+@.+\..+)>

输入字符串:

Hello my Email Address is <[email protected]> - Return [email protected] as Group1.
Hello my Email Address is [mailto: [email protected]] - Return [email protected] as Group2.

我希望如果任何字符串匹配,那么它应该在 Group1 中返回。

有什么办法可以做到这一点吗?

regex regex-negation regex-lookarounds regex-group regex-greedy
2个回答
1
投票

您可以使用正则表达式:

(?=\S+@)([^<\s]+@.*(?=[>\]]))
  • (?=\S+@)
    正向前瞻,断言后面是任何非空白字符,后跟
    @
  • ([^<\s]+@.*(?=[>\]]))
    捕获群体。捕获任何非空格、非
    ^
    字符,后跟
    @
    ,以及
    ]
    >
    字符之前的任何内容。

您可以在这里测试正则表达式。


0
投票

您可以首先匹配

<
并断言它以
..>
结尾,或者匹配
[mailto: 
并断言它以
]

结尾
(?:<(?=[^<>]*>)|\[mailto:\s*(?=[^][]*]))([^\s@]+@[^\s@]+\.\w{2,})
  • (?:
    替代方案的非捕获组
    • <(?=[^<>]*>)
      匹配
      <
      并断言
      ...>
      且不出现 `<
    • |
    • \[mailto:\s*
    • (?=
      • [^][]*]
    • )
  • )
    关闭非捕获组
  • (
    捕获第 1 组
    • [^\s@]+
      匹配除 @ 或空白字符之外的 1 个以上字符
    • @
      匹配@
    • [^\s@]+\.\w{2,}
      匹配 @ 以外的 1 个以上字符或空格字符后跟一个点和 2 个或更多单词字符(您可以根据需要使 TLD 更具体)
  • )
    关闭第 1 组

TLd

查看 正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.