我正在研究用标签开始和结束的句子.截至目前,我只有代码来查找单词,这是此机制的一部分.我如何根据下面的情况找到句子.
情况1:
Hello, #how are you# today.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想检测how are you
.现在如果只有一个单词,则忽略上述情况.
案例2:
Hello, #how are you #today.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只有单词#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;
}
Run Code Online (Sandbox Code Playgroud)
@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;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式匹配从#
后跟单词char的子字符串到最后一个单词char #
前面的子字符串,或者匹配一个#
前面没有单词char的子字符串,然后匹配任何1个单词字符.
#\b.*?\b#|\B#\w+
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
如果你想要排除子串,例如#_ s#
将第一个\b
转换为(?=\p{L})
/ (?=[a-zA-Z])
来要求一个字母,你可以稍微精确一点.
查看Java演示:
List<String> results = new ArrayList<>();
String s = "Hello, #how are you# today. Hello, #how are you #today.";
Pattern pattern = Pattern.compile("#\\b.*?\\b#|\\B#\\w+");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
results.add(matcher.group());
}
System.out.println(results);
// => [#how are you#, #how, #today]
Run Code Online (Sandbox Code Playgroud)