Java 正则表达式从errorString中捕获多个单词
我有一个字符串,它基本上包含错误信息,我想从错误字符串中捕获重要信息 我有下面的错误字符串Java 正则表达式从errorString中捕获多个单词,java,regex,regex-group,Java,Regex,Regex Group,我有一个字符串,它基本上包含错误信息,我想从错误字符串中捕获重要信息 我有下面的错误字符串 trackingID=jskdf-77sdkj-oij4-kerj43-lklfds; key1=lksfjsdkjfkslkdjf; key2=skjfjdkfj43jrkjskd; key3=lksfjsdkjfkslkdjf; key4=skjfjdkfj43jrkjskd; { "info":{ "details":[ { "co
trackingID=jskdf-77sdkj-oij4-kerj43-lklfds;
key1=lksfjsdkjfkslkdjf;
key2=skjfjdkfj43jrkjskd;
key3=lksfjsdkjfkslkdjf;
key4=skjfjdkfj43jrkjskd;
{
"info":{
"details":[
{
"code":"ABC23423",
"messages":"msg:INVALID_ERROR",
"timeStamp":"2019-08-30T15:03:43.668Z"
}
],
"$httpStatus":400
},
"status":400,
"test":"ABC2342fdsff3",
"contactDetails":{
"primaryCommunication":{
"addressLine1":"231 London 71",
"addressLine2":"",
"addressLine3":"",
"city":"London",
"country":"England",
"countryCode":"GB",
"postalCode":"TW33ER",
"usage":"Home",
"county":"ENGLAND",
"stateCode":"",
"state":""
},
"name":{
"number":"45765767343",
"title":"Mr",
"firstName":"Nitin",
"lastName":"Dumbre",
"address":"nitin-d@gmail.com",
"code":"+44"
},
"email":{
"address":"nitin-d@gmail.come"
},
"phone":[
{
"number":"44 7647632746732",
"code":"Home"
}
],
"preferredCountry":{
"code":""
},
"preferredLanguage":""
}
}
我想捕获以下属性值:
(trackingID|\\"code|\"messages|\"status\\")(=|\\":\\"|:)([^(;|\\"|,)]*)
上述正则表达式在所有情况下都不起作用。例如,给定字符串\“code\”:\“
多次出现,因此代码值被覆盖
我想捕获值code属性,它位于\“messages\”:\“
属性之前
您能帮我改进正则表达式吗?要解决您的问题,您可以使用GSON而不是正则表达式,它将是更干净、更不复杂的解决方案。同意使用JSON解析器是干净的,但是,并非所有的
字符串
都是JSON,因此在将其解析为映射
或您拥有的某个对象之前,您需要某种解析来提取TrackingId
,并提取JSON字符串本身
我不想费心,只要一行一行地从一开始就确定我想要的行,然后:
- 在
或=
上拆分:
- 通过移除
,“
和;
,
“code”
字段是第一个字段
private static String extract(String[] errorLines, String lineStart) {
return Arrays.stream(errorLines)
.map(String::trim) // remove spaces at the beginning
.filter(s -> s.startsWith(lineStart)) // filter lines starting with the value
.findFirst()// take the first one
.map(s -> s.split("[=:]", 2)[1]) // split and take the second half
.map(s -> s.replaceAll("[;\",]", "")) // remove unwanted characters
.orElse("");
}
然后,错误
是您的字符串:
String[] errorLines = error.split("\n");
Stream.of("trackingID", "\"code\":", "\"messages\":", "\"$httpStatus\":")
.map(s -> extract(errorLines, s))
.forEach(System.out::println);
产出:
jskdf-77sdkj-oij4-kerj43-lklfds
ABC23423
msg:INVALID_ERROR
400
我认为您的问题中需要一个json解析器,而不是regext。这应该是一个注释。