@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);
}
我需要知道提及是如何工作的,应该如何在文本中找到提及。 我们必须找到第一个 '@' 和最后一个 而不是 @"^[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);
}