我有一个字符串,里面有两个单引号,'字符。在单引号之间是我想要的数据。
我怎么能写一个正则表达式提取“我想要的数据”从下面的文本?
mydata = "some string with 'the data i want' inside";
我有一个字符串,里面有两个单引号,'字符。在单引号之间是我想要的数据。
我怎么能写一个正则表达式提取“我想要的数据”从下面的文本?
mydata = "some string with 'the data i want' inside";
当前回答
Apache Commons Lang为java提供了大量的辅助实用程序。lang API,最著名的是字符串操作方法。 在您的示例中,开始子字符串和结束子字符串是相同的,因此只需调用下面的函数。
stringutil的。substringBetween(String str, String标签) 获取嵌套在相同对象的两个实例之间的字符串 字符串。
如果开始子字符串和结束子字符串不同,则使用以下重载方法。
stringutil的。substringBetween(String str, String open, String close) 获取嵌套在两个字符串之间的字符串。
如果你想要匹配子字符串的所有实例,那么使用,
stringutil的。substringsBetween(String str, String open, String close) 在String中搜索由开始和结束标记分隔的子字符串, 返回数组中所有匹配的子字符串。
对于所讨论的示例,获取匹配子字符串的所有实例
String[] results = StringUtils.substringsBetween(mydata, "'", "'");
其他回答
你可以用这个 我使用while循环存储所有匹配子字符串在数组中,如果你使用
如果(matcher.find ()) { System.out.println (matcher.group (1)); }
你会得到匹配子串所以你可以用这个来获取所有匹配子串
Matcher m = Pattern.compile("[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+").matcher(text);
// Matcher mat = pattern.matcher(text);
ArrayList<String>matchesEmail = new ArrayList<>();
while (m.find()){
String s = m.group();
if(!matchesEmail.contains(s))
matchesEmail.add(s);
}
Log.d(TAG, "emails: "+matchesEmail);
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));
}
}
}
因为你还勾选了Scala,这是一个没有regex的解决方案,可以轻松处理多个带引号的字符串:
val text = "some string with 'the data i want' inside 'and even more data'"
text.split("'").zipWithIndex.filter(_._2 % 2 != 0).map(_._1)
res: Array[java.lang.String] = Array(the data i want, and even more data)
假设你想要单引号之间的部分,使用一个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
这群人对我不起作用。我使用group(0)来查找url版本。
Pattern urlVersionPattern = Pattern.compile("\\/v[0-9][a-z]{0,1}\\/");
Matcher m = urlVersionPattern.matcher(url);
if (m.find()) {
return StringUtils.substringBetween(m.group(0), "/", "/");
}
return "v0";