-1

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

感谢您分享您的经验

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

1 回答 1

2

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

这是最简单的一个:

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

更简洁的模式将使用称为前瞻的功能:

@[a-zA-Z0-9_.]+?(?![a-zA-Z0-9_.])
  • (?!) 是负前瞻。意思是“只有在它后面没有这个时才匹配”
  • 不需要命名捕获,因为前瞻不消耗前瞻部分。
  • 它通过使用非贪婪量词添加来支持多个提及查找+?。这确保匹配的提及尽可能短。

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);
}
于 2016-05-14T08:18:26.793 回答