0

我正在尝试构建一个匹配标记的 facebook 用户名(@username1 @user.name、@user_name 等)的正则表达式(在 C# 中)。我认为 facebook 用户名可以包含字母数字、破折号、句点和下划线字符。

这一个只匹配字母数字字符,但我需要一个也接受句点、破折号或下划线的字符:

MatchCollection results = Regex.Matches(text, "@\\w+");

任何帮助,非常感谢,谢谢!

4

3 回答 3

1

试试这个:

MatchCollection results = Regex.Matches(text, @"@[\w.-]+");

但是,这也将匹配电子邮件地址的域部分(因为根据您的规范,点是允许的字符)。如果您不希望这样,您可以添加一个否定的后向断言,以确保在 : 之前没有非空格字符@

MatchCollection results = Regex.Matches(text, @"(?<!\S)@[\w.-]+");
于 2012-11-25T17:23:03.627 回答
1

使用“完整列表”版本:

MatchCollection results = Regex.Matches(txt, @"(?:^|(?<=\s))@[a-zA-Z0-9_.-]+(?=\s|$)");

或短版(\w= [a-zA-Z0-9_]

MatchCollection results = Regex.Matches(txt, @"(?:^|(?<=\s))@[\w.-]+(?=\s|$)");
于 2012-11-25T17:38:18.210 回答
1

你也可以这样做

List<string> tagedNames=Regex.Matches(text,@"(?<=(\s|^))@[\w.-]+")
                             .Cast<Match>()
                             .Select(x=>x.Value)
                             .ToList<string>();
于 2012-11-25T17:46:03.740 回答