我正在尝试构建一个匹配标记的 facebook 用户名(@username1 @user.name、@user_name 等)的正则表达式(在 C# 中)。我认为 facebook 用户名可以包含字母数字、破折号、句点和下划线字符。
这一个只匹配字母数字字符,但我需要一个也接受句点、破折号或下划线的字符:
MatchCollection results = Regex.Matches(text, "@\\w+");
任何帮助,非常感谢,谢谢!
试试这个:
MatchCollection results = Regex.Matches(text, @"@[\w.-]+");
但是,这也将匹配电子邮件地址的域部分(因为根据您的规范,点是允许的字符)。如果您不希望这样,您可以添加一个否定的后向断言,以确保在 : 之前没有非空格字符@
:
MatchCollection results = Regex.Matches(text, @"(?<!\S)@[\w.-]+");
使用“完整列表”版本:
MatchCollection results = Regex.Matches(txt, @"(?:^|(?<=\s))@[a-zA-Z0-9_.-]+(?=\s|$)");
或短版(\w
= [a-zA-Z0-9_]
)
MatchCollection results = Regex.Matches(txt, @"(?:^|(?<=\s))@[\w.-]+(?=\s|$)");
你也可以这样做
List<string> tagedNames=Regex.Matches(text,@"(?<=(\s|^))@[\w.-]+")
.Cast<Match>()
.Select(x=>x.Value)
.ToList<string>();