asd*_*asd 351 java regex string text-extraction
我有一个字符串,其中包含两个单引号,即'字符.在单引号之间是我想要的数据.
如何编写正则表达式以从以下文本中提取"我想要的数据"?
mydata = "some string with 'the data i want' inside";
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 522
假设您希望单引号之间的部分,请使用此正则表达式Matcher:
"'(.*?)'"
Run Code Online (Sandbox Code Playgroud)
例:
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));
}
Run Code Online (Sandbox Code Playgroud)
结果:
the data i want
Beo*_*orn 67
你不需要正则表达式.
将apache commons lang添加到您的项目(http://commons.apache.org/proper/commons-lang/),然后使用:
String dataYouWant = StringUtils.substringBetween(mydata, "'");
Run Code Online (Sandbox Code Playgroud)
Nik*_*las 16
从此版本开始,您可以使用一种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...)
Run Code Online (Sandbox Code Playgroud)
上面的代码片段的结果是:
Run Code Online (Sandbox Code Playgroud)the data I want another data I want
if (matcher.find())与程序、检查和处理相比,最大的优势在于当一个或多个结果可用时易于使用while (matcher.find())。
小智 11
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为你还勾选了Scala,这是一个没有正则表达式的解决方案,可以轻松处理多个带引号的字符串:
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)
Run Code Online (Sandbox Code Playgroud)
这有一个简单的单行:
String target = myData.replaceAll("[^']*(?:'(.*?)')?.*", "$1");
Run Code Online (Sandbox Code Playgroud)
通过使匹配组可选,这也适用于在这种情况下通过返回空白而找不到引号.
查看现场演示.
String dataIWant = mydata.replaceFirst(".*'(.*?)'.*", "$1");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
584933 次 |
| 最近记录: |