用regex java拆分重复的字符串

时间:2016-05-23 21:18:34

标签: java regex

来自那个

    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;纸张尺寸"表示继续下一组

5 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

: (.*?)(?:Paper size|$) //global

regex demo输出:

enter image description here

答案 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]

查看IDEONE demo

或者,您可以匹配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]

请参阅another IDEONE demo

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));
  }

enter image description here

答案 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());