我有一个字符串,里面有两个单引号,'字符。在单引号之间是我想要的数据。
我怎么能写一个正则表达式提取“我想要的数据”从下面的文本?
mydata = "some string with 'the data i want' inside";
我有一个字符串,里面有两个单引号,'字符。在单引号之间是我想要的数据。
我怎么能写一个正则表达式提取“我想要的数据”从下面的文本?
mydata = "some string with 'the data i want' inside";
当前回答
String dataIWant = mydata.split("'")[1];
参见现场演示
其他回答
从Java 9开始
在这个版本中,你可以使用不带参数的新方法Matcher::results,它能够轻松地返回Stream<MatchResult>,其中MatchResult表示匹配操作的结果,并提供读取匹配的组和更多信息(这个类从Java 1.5开始就知道了)。
String string = "Some string with 'the data I want' inside and 'another data I want'.";
Pattern pattern = Pattern.compile("'(.*?)'");
pattern.matcher(string)
.results() // Stream<MatchResult>
.map(mr -> mr.group(1)) // Stream<String> - the 1st group of each result
.forEach(System.out::println); // print them out (or process in other way...)
上面的代码片段导致:
我想要的数据 我想要的另一个数据
与过程性的if (matcher.find())和while (matcher.find())检查和处理相比,最大的优势在于当有一个或多个结果可用时使用起来更容易。
假设你想要单引号之间的部分,使用一个Matcher正则表达式:
"'(.*?)'"
例子:
String mydata = "some string with 'the data i want' inside";
Pattern pattern = Pattern.compile("'(.*?)'");
Matcher matcher = pattern.matcher(mydata);
if (matcher.find())
{
System.out.println(matcher.group(1));
}
结果:
the data i want
在pom.xml中添加apache.commons依赖项
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
下面的代码可以工作。
StringUtils.substringBetween(String mydata, String "'", String "'")
String dataIWant = mydata.split("'")[1];
参见现场演示
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".*'([^']*)'.*");
String mydata = "some string with 'the data i want' inside";
Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
}
}