繁体   English   中英

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

[英]Java Regex Extract String between two Strings

问题

我有一个这样的模式:“奥斯卡提名”或“两个金球奖提名。奥斯卡提名。30胜18项提名”,我想确定? 加上正则表达式,所以奥斯卡的数量。

我尝试了什么

好像在那里

对应于此问题: 在JavaJava的两个字符串之间提取字符串

如何找到两个字符串之间的值? 我尝试了这种模式:

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

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

  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));
        }

试试这个模式

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

尝试这个,

String str = "Nom for 3 Oscar";
Pattern pattern = Pattern.compile("\\w+\\s+\\w+\\s+(\\d+)\\s+\\w+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    Log.d("Test", matcher.group(1));
}

我写测试,如在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”中以小写字母“ o”开头,在Pattern中以大写字母“ O”开头。

试试这个模式:

"\\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));
}

您想截取第三个字符串吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM