@mention 的工作原理,我如何在 .Net 中的评论中找到提及

How @mention works, how can I find mention during comment in .Net

我需要知道提及是如何工作的,应该如何在文本中找到提及。 我们必须找到第一个 '@' 和最后一个 而不是 @"^[a-zA-Z0-9_,]+$"

感谢您分享您的经验

string comment=" hi @fri.tara3^";
mention is : "@fri.tara3"

看起来很适合正则表达式。有多种方法可以解决这个问题。

这是最简单的:

 (?<mention>@[a-zA-Z0-9_.]+)[^a-zA-Z0-9_.]
  • 它搜索匹配的字符,然后搜索不匹配的字符。 [^ ... ] 取反位
  • (?<mention> ... ) 声明一个显式组来捕获提及,而不包括紧跟在提及之后的不匹配字符。
  • 并不是说这个模式在提到之后需要一个不匹配的字符,所以如果它很重要,可以解决这个问题。

更清晰的模式将使用名为 look-ahead:

的功能
@[a-zA-Z0-9_.]+?(?![a-zA-Z0-9_.])
  • (?!) 是负前瞻。含义 "only match if it is NOT followed by this"
  • 不需要命名捕获,因为前瞻不会消耗前瞻部分。
  • 它通过使用非贪婪量词 +? 添加来支持多个提及查找。这确保匹配的提及尽可能短。

Lookaheads 不太为人所知,如果模式变得太长,阅读起来可能会很痛苦。但它是一个有用的工具。

使用 C# 的完整示例:

string comment = "hi @fri.tara3^ @hjh not a mention @someone";
const String pattern = "@[a-zA-Z0-9_.]+?(?![a-zA-Z0-9_.])";
var matches = Regex.Matches(comment, pattern);

for (int i = 0; i < matches.Count; i++)
{
    Console.WriteLine(matches[i].Value);
}