Python正则匹配@开头词时如何排除后面紧跟@的匹配项
解决方案
你只需要调整原有正则末尾的负向先行断言规则即可,修改后的完整正则如下:
(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9-_]+)(?![\w@])
修改逻辑说明
- 原有正则末尾的
(?!\w)仅限制匹配内容后不能紧跟单词字符,没有覆盖你需要排除的紧跟@的场景 - 将其调整为
(?![\w@])后,就可以同时限制匹配内容后既不能紧跟单词字符,也不能紧跟@字符,刚好满足你的排除需求 - 原有前缀的正向回顾断言逻辑保持不变,仍然用于保证
@前为行首或非用户名允许的字符,符合匹配独立@提及的规则
测试结果验证
针对你给出的测试字符串@first@nope @second@Hello @my-friend, email@ whats.up@example.com @friend,使用修改后的正则匹配,最终仅会得到两个符合要求的结果:
@my-friend@friend@first、@second这类后面紧跟@的结果会被完全排除。
内容的提问来源于stack exchange,提问作者ImportError
相关产品推荐
相关产品推荐

