Java 两个字符串之间的正则表达式提取字符串
Java Regex Extract String between two Strings
问题
我有这样的模式 "Nom for ? oscars" 或 "Nom for 2 Golden Globes. Nom for ? oscars. 30 wins 18 nominations" 我想确定 ?使用正则表达式,所以奥斯卡的数量。
我试过的
好像有
对应本题: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: No successful match so far
我想我只是监督了一些非常简单的事情。
你们能帮帮我吗?
编辑
所以问题是我在循环后调用了 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));
}
试试这个模式:
"\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));
}
是否要截取第三个字符串?
我按照 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" 以小写 "o" 开头,在模式中以大写 "O".
问题
我有这样的模式 "Nom for ? oscars" 或 "Nom for 2 Golden Globes. Nom for ? oscars. 30 wins 18 nominations" 我想确定 ?使用正则表达式,所以奥斯卡的数量。
我试过的
好像有
对应本题: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: No successful match so far
我想我只是监督了一些非常简单的事情。
你们能帮帮我吗?
编辑
所以问题是我在循环后调用了 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));
}
试试这个模式:
"\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));
}
是否要截取第三个字符串?
我按照 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" 以小写 "o" 开头,在模式中以大写 "O".