gpt4 book ai didi

c# - 正则表达式先行丢弃匹配项

转载 作者:太空狗 更新时间:2023-10-29 23:21:49 25 4
gpt4 key购买 nike

我正在尝试进行正则表达式匹配,它完全放弃了前瞻。

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

这是比赛,这是我的 regex101 test .

但是当电子邮件以-_.开头时,它不应该完全匹配,而不仅仅是删除初始符号。欢迎任何想法,过去半小时我一直在搜索,但无法弄清楚如何删除以这些符号开头的整封电子邮件。

最佳答案

您可以在 @ 附近使用单词边界用否定的后视来检查我们是在字符串的开头还是在空格之后,然后检查第一个符号是否不在不需要的类中 [^\s\-_.] :

(?<=^|\s)[^\s\-_.]\w*(?:[-+.]\w+)*\b@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*

参见 demo

匹配列表:

support@github.com
s.miller@mit.edu
j.hopking@york.ac.uk
steve.parker@soft.de
info@company-hotels.org
kiki@hotmail.co.uk
no-reply@github.com
s.peterson@mail.uu.net
info-bg@software-software.software.academy

关于用法和替代符号的附加说明

请注意,最佳做法是在正则表达式中使用尽可能少的转义字符,因此,[^\s\-_.]可以写成 [^\s_.-] , 字符类末尾的连字符仍然表示文字连字符,而不是范围。此外,如果您打算在其他正则表达式引擎中使用该模式,您可能会发现后视中的交替有困难,然后您可以替换 (?<=\s|^)相当于(?<!\S) .参见 this regex :

(?<!\S)[^\s_.-]\w*(?:[-+.]\w+)*\b@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*

最后但同样重要的是,如果您需要在 JavaScript 或其他不支持环视的语言中使用它,请替换 (?<!\S)/(?<=\s|^)与(非)捕获组 (\s|^) , 用另一组捕获括号将整个电子邮件模式部分包裹起来,并使用语言手段来抓取第 1 组内容:

(\s|^)([^\s_.-]\w*(?:[-+.]\w+)*\b@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)

参见 regex demo .

关于c# - 正则表达式先行丢弃匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com