如果同一行中存在无效用户名,则用于解析 Telegram 用户名的正则表达式将停止解析有效用户名

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

下午好,我这里有一个问题,我有一个正则表达式,可以提取 Telegram 链接中的用户名,从简单的“@”到

username.t.me
链接

image with problem in the regular expession

问题是,如果我输入

@aaaa, @jfewewf
,两个用户名都会正确匹配,但是当我输入
@aaaa, @jfewewf_
时,两个用户名都不匹配,即使脚本应该只匹配用户名
@aaaa
(因为右侧的用户名是无效

这是我的正则表达式:

(?:(?<!\S)@|(?:(?:https?://|)(?:t\.me|telegram\.(?:me|dog))/(?:c/|)|tg://resolve\?domain=)|(?=^(?!.*__)(?!.*_{2,})[a-z][a-z0-9_]{3,31}(?<!_)\.t\.me$))(?P<username>(?!.*__)(?!.*_$)(?!.*_{2,})[a-z][a-z0-9_]{3,31})(?P<subdomain>\.t\.me)?

您可以通过此链接进行测试:https://regex101.com/r/JFF1S0/9

请帮助我🙏🙏🙏

提前致谢!

我已经尝试了几乎所有的方法,我根本不知道如何解决它(ChatGPT也根本没有帮助)

python regex parsing telegram regex-group
1个回答
0
投票

为此,请删除
(?!.*_$)
并在
(?<!_)\b
 之后添加 
[a-z][a-z0-9_]{3,31}

这是更新后的正则表达式:

(?:(?<!\S)@|(?:(?:https?://|)(?:t\.me|telegram\.(?:me|dog))/(?:c/|)|tg://resolve\?domain=)|(?=^(?!.*__)(?!.*_{2,})[a-z][a-z0-9_]{3,31}(?<!_)\.t\.me$))(?P<username>(?!.*__)(?!.*_{2,})[a-z][a-z0-9_]{3,31}(?<!_)\b)(?P<subdomain>\.t\.me)?

https://regex101.com/r/JFF1S0/10

来自 Telegram 聊天的原始答案:

regex101 这会检查到行尾,因此会在末尾找到“_”并且不会占用整行[1]

尝试https://regex101.com/r/C6FZER/1[1]

我删除你

(?!.*_$)
并在
(?<!_)\b
[3] 之后添加 [a-z][a-z0-9_]{3,31}

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