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

May*_*ies 4 java regex string android illegalstateexception

问题

我有一个这样的模式“提名?奥斯卡”或“提名 2 座金球奖。提名?奥斯卡。30 次赢得 18 项提名” 我想确定 ? 用正则表达式,所以奥斯卡的数量。

我试过的

好像有

对应这个问题:在java中提取两个字符串之间的字符串

如何在两个字符串之间找到一个值?我试过这种模式:

final Pattern pattern = Pattern.compile("for(.*?)Oscar");
Run Code Online (Sandbox Code Playgroud)

接下来我尝试了这个问题:Java - 在两个字符串之间获取所有字符串的最佳方法?(正则表达式?)

  final Pattern pattern = Pattern.compile(Pattern.quote("Nom") +"(.*?)"+ Pattern.quote("Oscar"));
Run Code Online (Sandbox Code Playgroud)

我的其余代码:

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

    }
Log.d("Test", matcher.group(1));
Run Code Online (Sandbox Code Playgroud)

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

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));
        }
Run Code Online (Sandbox Code Playgroud)

Wro*_*bel 5

在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));
            }
        }
Run Code Online (Sandbox Code Playgroud)

输出:

    3 
 234235 
Run Code Online (Sandbox Code Playgroud)

在我回答之后,您编辑了您的问题,我看到,在您的输入字符串中,“oscar”以小写“o”开头,在 Pattern 中以大写“O”开头。