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

时间:2018-03-01 11:39:52

标签: java regex string

我正致力于检测以标签开头和结尾的句子。截至目前,我只有代码来查找单词,这是此机制的一部分。我如何根据下面的情况找到句子。

案例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;
    }

1 个答案:

答案 0 :(得分:6)

您可以使用正则表达式来匹配#中的子字符串,后面跟着一个单词char,直到第一个带有单词char的#,或匹配{{1} }之前没有单词char,然后有任何1个单词字符。

#

请参阅regex demo

如果您想通过将第一个#\b.*?\b#|\B#\w+ 转换为#_ s# / \b来要求输入一个字母来排除(?=\p{L})之类的子字符串,则可以稍微精确一点。

查看Java demo

(?=[a-zA-Z])