用于搜索和提取多个字符串的Java正则表达式模式

时间:2014-10-21 12:31:56

标签: java regex substring

我希望有人可以协助以下正则表达式,因为我无法让它工作。

我有" breadcrumb"字符串总是由格式" MainCategory>组成。子类别"字符串可以包含多个通过" |"分隔的字符串: 游戏>第一人称射击游戏|游戏>行动| AudioVisual>音乐 要么 游戏>第一人称射手

在上面的示例中,我需要提取所有主要类别为" Game"的子类别,因此正则表达式将返回: - 第一人称射击 - 行动

解决:

String strSearch = "Game > First person shooter|Game > Action|AudioVisual > Music";
Pattern findGenre = Pattern.compile("Game\\s*>\\s*([^\\|]+)");
Matcher matcher = findGenre.matcher(strSearch);
while (matcher.find()) {
  System.out.println(matcher.group(1));
}

输出是:

First person shooter
Action

2 个答案:

答案 0 :(得分:1)

你可以这样做:

public String extract(String input, String cat)
{
    Pattern p = Pattern.compile(cat + "\\s*>\\s*([^\\|]+)");
    Matcher m = p.matcher(input);
    StringBuffer sb = new StringBuffer();
    while (m.find())
    {
        sb.append(" - ").append(m.group(1));
    }
    return sb.toString();
}

用法:

System.out.println(extract("Game > First person shooter|Game > Action|AudioVisual > Music", "Game"));

打印:

 - First person shooter - Action

答案 1 :(得分:0)

我假设你输入的是

Game > First person shooter|Game > Action|AudioVisual > Music | Game > First person shooter

您需要以下商品

First person shooter, Action  

试试这个正则表达式:Game\\s*>\\s*(.+?)\\s*\\||Game\\s*>\\s*(.+?)$