Java Regex提取两个字符串之间的字符串

时间:2017-04-07 05:02:54

标签: java android regex string illegalstateexception

问题

我有一个像这样的模式“Nom for?oscars”或“Nom for 2 Golden Globes.Nom for?oscars .30胜18提名”我想确定?有正则表达式,所以奥斯卡的数量。

我尝试了什么

似乎有

对应这个问题:Extract string between two strings in java

How do I find a value between two strings?我尝试了这种模式:

final Pattern pattern = Pattern.compile("for(.*?)Oscar");

接下来,我按照以下问题尝试了此操作:Java - Best way to grab ALL Strings between two Strings? (regex?)

  final Pattern pattern = Pattern.compile(Pattern.quote("Nom") +"(.*?)"+ Pattern.quote("Oscar"));

我的其余代码:

final Matcher matcher = pattern.matcher("Nom for 3 Oscar");
    while(matcher.find()){

    }
Log.d("Test", matcher.group(1));

所有这些模式导致此异常:

  

java.lang.IllegalStateException:到目前为止没有成功匹配

我想我只是监督一些非常简单的事情。

你能帮助我吗?

修改

所以问题是我在循环之后调用了matcher.group(1)。我想念了find方法的工作原理。但是,当我在循环中调用matcher.group(1)时,这段代码确实有效。

   final Pattern pattern = Pattern.compile("for(.*?)Oscar");
    final Matcher matcher = pattern.matcher("Nom for 3 Oscar");
        while(matcher.find()){
         Log.d("Test", matcher.group(1));
        }

3 个答案:

答案 0 :(得分:1)

尝试这种模式,

Handler

试试这个,

\w+\s+\w+\s(\d+)\s\w+

答案 1 :(得分:1)

我在Extract string between two strings in java中编写测试,这是有效的。我认为您的输入字符串不匹配:

 @Test
        public void regex() {
            String str = "Nom for 3 Oscar, dom for 234235 Oscars";
            Pattern pattern = Pattern.compile("for(.*?)Oscar");
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                System.out.println(matcher.group(1));
            }
        }

输出:

    3 
 234235 

在我的回答之后你编辑了你的问题,我看到,在你的输入字符串" oscar"以lowecase" o"开头,用大写字母" O"。

答案 2 :(得分:0)

尝试这种模式:

"\\w+\\s+\\w+\\s+(\\w+)\\s+\\w+"

测试代码:

String str = "Nom for you Oscar";
Pattern pattern = Pattern.compile("\\w+\\s+\\w+\\s+(\\w+)\\s+\\w+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

你想拦截第三个字符串吗?