尝试构造正则表达式以匹配标记的用户名

时间:2012-11-25 17:21:07

标签: c# .net regex facebook string

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

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

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

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

3 个答案:

答案 0 :(得分:1)

试试这个:

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

但是,这也会匹配电子邮件地址的域部分(因为根据您的规范,点是允许的字符)。如果你不想这样,你可以添加一个负面的lookbehind断言,以确保@之前没有非空格字符:

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

答案 1 :(得分: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|$)");

答案 2 :(得分:1)

你也可以这样做

List<string> tagedNames=Regex.Matches(text,@"(?<=(\s|^))@[\w.-]+")
                             .Cast<Match>()
                             .Select(x=>x.Value)
                             .ToList<string>();