用正则表达式解析tweet文本

本文关键字:tweet 文本 正则表达式 | 更新日期: 2023-09-27 18:17:39

regex -新手。寻找一些c# regex代码来"语法高亮"twitter文本。所以给定这条tweet:

@taglius here's some tweet text that shouldn't be highlighted #tagtestpix http://aurl.jpg

我想找到用户提及(@),标签(#)和url (http://)),并添加适当的html来突出显示这些元素。就像

<font color=red>@taglius</font> here's some tweet text that shouldn't be highlighted   <font  color=blue>#tagtestpix</font> <font color=yellow>http://aurl.jpg</font>

这不是我要使用的确切的html,但我想你已经明白了。

用正则表达式解析tweet文本

以上的答案是整个答案的一部分,所以我想我可以添加一些额外的来回答你的问题:

你的高亮函数看起来像这样:

public static String HighlightTwitter(String input)
{
    String result = Regex.Replace(input, @"'b'@'w+", @"<font color=""red"">$0</font>");
    result = Regex.Replace(result, @"'b#'w+", @"<font color=""blue"">$0</font");
    result = Regex.Replace(result, @"'bhttps?://[-'w]+('.'w[-'w]*)+(:'d+)?(/[^.!,?;""''<>()'[']'{'}'s'x7F-'xFF]*([.!,?]+[^.!,?;""''<>'(')'[']'{'}'s'x7F-'xFF]+)*)?'b", @"<font color=""yellow"">$0</font", RegexOptions.IgnoreCase);
    return result;
}

我包含了'b,以确保@和#是单词的开头,并确保url是独立的。这意味着#this_will_highlight和#this_will_not。

如果性能可能是一个问题,您可以使用RegexOptions将正则表达式设置为静态成员。编制

例如:

private static Regex regexAt = new Regex(@"'b'@'w+", RegexOptions.Compiled);
...
    String result = regexAt.Replace(input, @"<font color=""red"">$0</font>");
    ...

下面将匹配'@'字符后面跟着一串字母num字符:

@'w+

下面的语句将匹配'#'字符后面跟着一串字母-num字符:

'#'w+

有很多自由格式的http url匹配表达式,这是我最常用的一个:

https?://[-'w]+('.'w[-'w]*)+(:'d+)?(/[^.!,?;""''<>()'[']'{'}'s'x7F-'xFF]*([.!,?]+[^.!,?;""''<>'(')'[']'{'}'s'x7F-'xFF]+)*)?

最后,你会得到假阳性的点击,所有这些,所以你需要认真研究如何正确地描绘这些标签…例如,你有以下tweet:

the url http://Roger@example.com/#bookmark is interesting.

显然这将是一个问题,因为所有三个表达式将在url中匹配。为了避免这种情况,你需要弄清楚什么字符可以出现在匹配的前面或后面。例如,在@name引用之前需要一个空格或字符串的开始,后面需要一个','或空格。

(?<=[^'s])@'w+(?=[,'s])

正则表达式模式并不容易,我建议使用Expresso这样的工具。

您可以使用('@'w+)解析@回复。您可以使用(#'w+)解析散列标签。