请在 Linkify 中使用正则表达式作为Pattern
使用。
我试图在字符串中提取 #hashtags 和 @mentions ,所以我需要找到以{{1}开头的字符串中的单词和#
(当然以空白结束),只是在一个正则表达式中。
在这个词中,我需要承认任何语言中的每个可能的字符(某处:) :)。
谢谢。
修改
当我说每个可能的字符时,我错了:我无论如何都要遵循相同的推特规则,所以例如@
之类的字符不被允许。
答案 0 :(得分:2)
如果您想要Twitter规则,为什么不使用比其他任何人更了解规则的图书馆:the Twitter themselves? : - )
如果您使用Gradle,只需将compile 'com.twitter:twitter-text:1.12.1'
添加到Gradle文件中的依赖项即可。
或者对于Maven,添加到pom.xml:
<dependencies>
<dependency>
<groupId>com.twitter</groupId>
<artifactId>twitter-text</artifactId>
<version>1.12.1</version>
</dependency>
</dependencies>
然后在您的代码中,您可以像这样调用Twitter库:
import com.twitter.Extractor;
public class Main {
public static void main(String[] args) {
Extractor extractor = new Extractor();
String text = "extracting hashtags and mentions in #java using @twitter library from @github";
System.out.println("#hashtags:");
for (String hashtag : extractor.extractHashtags(text)) {
System.out.println(hashtag);
}
System.out.println();
System.out.println("@mentions:");
for (String mention : extractor.extractMentionedScreennames(text)) {
System.out.println(mention);
}
}
}
答案 1 :(得分:1)
在看到您想根据Twitter识别哈希标签并阅读_Actual_ Twitter format for hashtags? Not your regex, not his code-- the actual one?
之后尝试这种模式:
"^[@#]\\w+|(?<=\\s)[@#]\\w+"
它匹配以"@"
或"#"
开头的字词,这些字词位于行的开头或前面有空格
代码示例:
public static void main(String[] args) throws Exception {
String string = "#hashtags and @mentions";
Matcher matcher = Pattern.compile("^[@#]\\w+|(?<=\\s)[@#]\\w+").matcher(string);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
结果:
#hashtags
@mentions
答案 2 :(得分:0)
尝试使用此正则表达式(在Java中使用\\
而不是\
:
/(#\S+)|(@\S+)/g
或
/([#@]\S+)/g
你也可以使用它来使用\1
替换:
/.*?([#@]\S+)[^#@]*/g
如果您要删除#
和@
,请使用此选项:
/.*?[#@](\S+)[^#@]*/g
或
/.*?[#@](\S+)[^#@\-]*/g
String rgx = ".*?[#@](\S+)[^#@\-]*";
Pattern pattern = Pattern.compile(rgx, Pattern.DOTALL);