我正致力于检测以标签开头和结尾的句子。截至目前,我只有代码来查找单词,这是此机制的一部分。我如何根据下面的情况找到句子。
案例1:
Hello, #how are you# today.
在这种情况下,我想检测how are you
。现在如果只有一个单词,则忽略上述情况。
案例2:
Hello, #how are you #today.
在这种情况下,只找到单词#how
和#today
,我已经开始工作了。这里没有句子,因为单词不以hashtag结尾。
代码:
@Override
public List<String> findHashTags(String text){
if(text == null){
return new ArrayList<>();
}
String[] tagSet = text.split(" ");
Set<String> sortedTags = new HashSet<>();
List<String> processedTags = new ArrayList<>();
for(String tags : tagSet){
if(tags.startsWith("#")){
sortedTags.add(tags);
}
}
processedTags.addAll(sortedTags);
return processedTags;
}
@Override
public List<String> findHashTags(String text){
if(text == null){
return new ArrayList<>();
}
Set<String> sortedTags = new HashSet<>();
List<String> processedTags = new ArrayList<>();
Pattern pattern = Pattern.compile("#\\b.*?\\b#|\\B#\\w+");
Matcher matcher = pattern.matcher(text);
while (matcher.find()){
String outString = matcher.group();
outString = outString.replace("#","");
outString = outString.replace(",","");
sortedTags.add(outString);
}
processedTags.addAll(sortedTags);
return processedTags;
}
答案 0 :(得分:6)
您可以使用正则表达式来匹配#
中的子字符串,后面跟着一个单词char,直到第一个带有单词char的#
,或匹配{{1} }之前没有单词char,然后有任何1个单词字符。
#
请参阅regex demo
如果您想通过将第一个#\b.*?\b#|\B#\w+
转换为#_ s#
/ \b
来要求输入一个字母来排除(?=\p{L})
之类的子字符串,则可以稍微精确一点。
查看Java demo:
(?=[a-zA-Z])