我需要在Android-App中匹配Twitter-Hashtags,但我的代码似乎没有做到它应该做的事情。 我想出的是:
ArrayList<String> tags = new ArrayList<String>(0);
Pattern p = Pattern.compile("\b#[a-z]+", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(tweet); // tweet contains the tweet as a String
while(m.find()){
tags.add(m.group());
}
变量tweet包含一个包含hashtags的常规推文 - 但find()不会触发。所以我想我的正则表达式是错误的。
答案 0 :(得分:3)
由于\b
字边界锚,你的正则表达式失败了。此锚仅在非单词字符和单词字符(字母数字字符)之间匹配。因此,将它直接放在#
前面会导致正则表达式失败,除非 #
之前有一个字母数字字符!您的正则表达式会匹配foobarfoo#hashtag blahblahblah
中的主题标签,但不会匹配foobarfoo #hashtag blahblahblah
中的主题标签。
请改用#\w+
,并记住,在字符串中,您需要加倍反斜杠:
Pattern p = Pattern.compile("#\\w+");
答案 1 :(得分:2)
如果您尝试匹配哈希标记,则您的模式应为“#(\\ w +)”。使用这个和推特“转发披萨到#pizzahut”,做m.group()会给“#pizzahut”而m.group(1)会给“pizzahut”。
编辑:注意,html显示正在搞乱转义的反斜杠,你需要在Java的字符串文字中有两个w。