【发布时间】:2017-03-14 22:02:27
【问题描述】:
我相信代码没问题,问题是正则表达式。
基本上我想找到一个用户名提及(它以@开头),然后我想从给定的单词中提取允许的用户名部分。
例如,如果文本包含“@FOO!!”我只想提取“foo”,但我相信问题出在我的“split("[a-z0-9-_]+")[0]” 部分。
顺便说一句,允许的符号是数字、字母、- 和 _
public static Set<String> getMentionedUsers(List<Tweet> tweets) {
Set<String> mentioned = new HashSet<>();
for (Tweet tweet : tweets) {
String tweetToAnal = null;
if (tweet.getText().contains("@")) tweetToAnal = tweet.getText();
if (tweetToAnal == null) continue;
String[] splited = tweetToAnal.split("\\s+");
for (String elem : splited) {
String newElem = "";
if (elem.startsWith("@")) {
newElem = elem.substring(1).toLowerCase().split("[a-z0-9-_]+")[0];
}
if (newElem.length() > 0) mentioned.add(newElem);
}
}
return mentioned;
}
【问题讨论】:
-
IIRC,Twitter api 将在推文的元数据中提供@mentions。您没有使用 API 吗?
-
或使用经过验证的
"@(\\w+)"正则表达式。 -
使用
(?<=@)[\w-]+应该足够了,你不需要拆分或任何东西...... -
@rmlan 不,我不能使用 API,推文已经是文本格式了。
-
@nozzleman 你能提供更多代码吗?我正在尝试提到 = (Set
) Arrays.asList(tweet.getText().split("?