来自那个
String s = "Paper size: A4Paper size: A3Paper size: A2";
我需要A4,A3和A2。我怎么能这样做?
String regex = "Paper size: (.*?)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println( m.group(1));
}
这会返回空字符串。
编辑:在A3的位置,A4,A5可以是任何字符序列,然后接下来的#34;纸张尺寸"表示继续下一组
答案 0 :(得分:2)
答案 1 :(得分:0)
如果您的值可以包含任何值,则可以使用变通方法拆分:
String s = "Paper size: A4Paper size: A3Paper size: A2";
String[] res = s.replaceFirst("^Paper size:\\s*", "") // Remove the first delimiter to get rid of the empty value
.split("Paper size:\\s*"); // Split
System.out.println(Arrays.toString(res)); // => [A4, A3, A2]
或者,您可以匹配Paper size:
以外的任何文字,并将其与([^P]*(?:P(?!aper size:)[^P]*)*)
一起捕获:
String s = "Paper size: A4Paper size: A3Paper size: A2";
String pattern1 = "Paper size: ([^P]*(?:P(?!aper size:)[^P]*)*)";
Pattern ptrn = Pattern.compile(pattern1);
Matcher matcher = ptrn.matcher(s);
List<String> res = new ArrayList<>();
while (matcher.find())
res.add(matcher.group(1));
System.out.println(res); // => [A4, A3, A2]
Paper size: ([^P]*(?:P(?!aper size:)[^P]*)*)
实际上与(?s)Paper size: (.*?)(?=Paper size: |\z)
的模式相同,但是展开的模式相同,输入时间更长,效率更高。
答案 2 :(得分:0)
String s = "Paper size: A4Paper size: A3Paper size: A2";
String regex = "([A-Z]\\d)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println( m.group(1));
}
答案 3 :(得分:0)
只需用这个代替你的正则表达式:"Paper size: (..)?"
OR
"Paper size: (\\w\\d)?"
如果你想严格要求被捕获的小组总是由一个字母后跟一个数字组成。
答案 4 :(得分:0)
如果你只是需要得到
纸张尺寸:A4
纸张尺寸:A3
纸张尺寸:A2
使用String regex = "Paper size: A[234]";
System.out.println(m.group());