拆分字符串多个模式

时间:2017-02-15 20:34:52

标签: java regex string string-parsing

我有一个"Some lengthy string, Pattern1: string1, Pattern2: string2, Pattern3: string3"形式的字符串。我的目标是从string1中提取string2string3String

请注意,StringsPattern1Pattern2Pattern3本身由多个字符组成。如果这些模式是单个字符,我知道解决方案。目前,我被迫为String.split()Pattern1Pattern2分别进行多次Pattern3次呼叫。

有更优雅的方式吗?或者没有转发多个split()来电?

编辑:我正在寻找或者是特定于Java的解决方案(因此Java在标题中,但它已被删除)。无论如何。这就是我尝试过的,它似乎对我有用。

String someString = "Some lengthy string Pattern1: string1 Pattern2: string2 Pattern3: string3";
String [] str = someString.split("Pattern1:|Pattern2:|Pattern3:");
System.out.println(str[1]);
System.out.println(str[2]);
System.out.println(str[3]);

输出

string1
string2
string3

这有什么明显的问题吗?

3 个答案:

答案 0 :(得分:1)

要获得目标数组,首先必须剥离主要部分,然后拆分其他模式:

String targets = input.replaceAll("^.*?Pattern1: ", "").split(", (Pattern2|Pattern3): ");

答案 1 :(得分:0)

String.replaceAll()而不是捕获组怎么样?

str.replaceAll(".*(?:Pattern1: ([^,]*))(?:, Pattern2: ([^,]*))(?:, Pattern3: ([^,]*))", "$1;$2;$3").split(";");

或者为了使它更短,你可以删除模式,只是寻找冒号:

str.replaceAll("[^:]*: ([^,]*,?)", "$1").split(",");

答案 2 :(得分:0)

String stringToSearch ="一些冗长的字符串Pattern1:string1 Pattern2:string2 Pattern3:string3&#34 ;;

String REGEX = "Pattern\\w:\\s[\\w]+";
Pattern p1 = Pattern.compile(REGEX);
Matcher m = p1.matcher(stringToSearch);

Pattern p2 = Pattern.compile(":");

while (m.find())
{
    String[] items = p2.split(m.group());
    if(items.length < 2 )
       break;
    System.out.println(items[1]);   
}

输出:

字符串1 字符串2 STRING3