Regex-noob在这里。寻找一些C#正则表达式代码来“语法高亮”推文文本。所以给这条推文:
@taglius here's some tweet text that shouldn't be highlighted #tagtestpix http://aurl.jpg
我想找到用户提及(@),hashtags(#)和urls(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,但我认为你明白了。
答案 0 :(得分:1)
以下内容匹配'@'字符后跟一系列alpha-num字符:
@\w+
以下内容将匹配'#'字符,后跟一系列alpha-num字符:
\#\w+
有很多自由形式的http url匹配表达式,这是我最常用的一个:
https?://[-\w]+(\.\w[-\w]*)+(:\d+)?(/[^.!,?;""\'<>()\[\]\{\}\s\x7F-\xFF]*([.!,?]+[^.!,?;""\'<>\(\)\[\]\{\}\s\x7F-\xFF]+)*)?
最后,你会得到所有这些误报,所以你需要真正认真地看看如何正确描绘这些标签...例如你有以下推文:
the url http://Roger@example.com/#bookmark is interesting.
显然这将是一个问题,因为所有三个表达式都将在url内匹配。为避免这种情况,您需要确定在匹配之前或之后允许的字符数。例如,以下内容要求在@name引用之前有一个空格或字符串的开头,并且后面需要一个“,”或空格。
(?<=[^\s])@\w+(?=[,\s])
正则表达式模式并不容易,我建议使用像Expresso这样的工具。
答案 1 :(得分:1)
上面的答案是整个答案的一部分,所以我想我可以补充一些额外的答案来回答你的问题:
您的高亮显示功能如下所示:
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以确保@和#是单词的开头,并确保网址独立。这意味着#this_will_highlight但#this_will_not。
如果性能可能成为问题,您可以使用RegexOptions.Compiled将正则表达式作为静态成员
E.g:
private static Regex regexAt = new Regex(@"\b\@\w+", RegexOptions.Compiled);
...
String result = regexAt.Replace(input, @"<font color=""red"">$0</font>");
...
答案 2 :(得分:0)
您可以使用(\ @ \ w +)解析@回复。您可以使用(#\ w +)解析哈希标记。