查找以哈希开头和结尾的句子

We *_*org 6 java regex string

我正在研究用标签开始和结束的句子.截至目前,我只有代码来查找单词,这是此机制的一部分.我如何根据下面的情况找到句子.

情况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)

Wik*_*żew 6

您可以使用正则表达式匹配从#后跟单词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)