@mention如何工作,如何在.Net评论期间找到提及

时间:2016-05-14 07:33:27

标签: .net regex indexof mention

我需要知道提及的工作方式,如何在文本中找到提及。 我们必须首先找到&#39; <&#39; 的最后一个而不是@&#34; ^ [a-zA-Z0-9 _,] + $&# 34;

感谢您分享您的经验

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

1 个答案:

答案 0 :(得分:2)

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

这是最简单的一个:

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

清洁模式将使用名为look-ahead的功能:

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

前瞻性有点鲜为人知,如果模式变得太长,可能会变得很难读。但它是一个有用的工具。

使用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);
}