我正在尝试构建一个匹配标记的facebook用户名(@ username1 @ user.name,@ user_name等)的正则表达式(在C#中)。我认为facebook用户名可以包含字母数字,短划线,句号和下划线字符。
这个只匹配字母数字字符,但我需要一个也接受句号,短划线或下划线的字符:
MatchCollection results = Regex.Matches(text, "@\\w+");
任何帮助,非常感谢,谢谢!
答案 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>();