我有一个"Some lengthy string, Pattern1: string1, Pattern2: string2, Pattern3: string3"
形式的字符串。我的目标是从string1
中提取string2
,string3
和String
。
请注意,Strings
,Pattern1
,Pattern2
和Pattern3
本身由多个字符组成。如果这些模式是单个字符,我知道解决方案。目前,我被迫为String.split()
,Pattern1
和Pattern2
分别进行多次Pattern3
次呼叫。
有更优雅的方式吗?或者没有转发多个split()
来电?
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
这有什么明显的问题吗?
答案 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