我使用下面的代码尝试将字符串“ this is a test 1”拆分为一个数组,其中第一个元素包含字符串“ this is test”,第二个元素包含1
。
final Pattern mp = Pattern.compile("/.+?(?=0|1)/");
System.out.println(Arrays.asList(mp.split("this is a test 1")[0]));
当我执行此代码时,将显示以下内容:
[this is a test 1]
正则表达式"/.+?(?=0|1)/"
用于匹配所有字符串,直到遇到1或0。
如何返回Array(“ this is a test”,1)?
更新:
是否还应该返回相同的模式:
final Pattern reg = Pattern.compile("/.+?(?=0|1)/");
System.out.println(reg.matcher("this is a test 1").group(0));
它引发异常:
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at First.main(First.java:58)
但是基本上是相同的代码,但是更短吗?
答案 0 :(得分:1)
您有一个模式,但是实际上您需要创建一个Matcher
来将字符串与您的模式匹配。可以在下面找到一个示例:
public static void main(String[] args) {
final String regex = ".+?(?=0|1)";
final String string = "this is a test 1";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
}
您似乎希望同时拥有这两个元素,但是当前的正则表达式不允许这样做。尝试使用(.+?)([0-1])
,它将这两个元素都放入组中。示例:
public static void main(String[] args) {
final String regex = "(.+?)([0-1])";
final String string = "this is a test 1";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
}
答案 1 :(得分:0)
尝试使用正则表达式(?=0|1)
将字符串拆分为this is a test
和1
。
String mp="this is a test 1";
System.out.println(Arrays.asList(mp.split("(?=0|1)")));
答案 2 :(得分:0)
使用此
String text="this is a test 1";
System.out.println(Arrays.asList(text.split("(?=[01])")));
答案 3 :(得分:0)
您希望在1|0
之前的空格处进行拆分,因此可以使用先行断言:
String res = "this is a test 1 and 0 is it".split(" (?=(0|1))")
哪个返回{ "this is a test", "1 and", "0 is it" }