我需要两个不同的Regex来分割字符串,适用于以下场景。 使用 Java 平台。
1。只需要第一个“/”就可以拆分,如果斜线在“{}”括号内,则不会考虑它 而且我还需要截断开始和结束大括号“{}”,只有它类似于示例c)。
input: "Response/CartResponse/{StatusData/ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}},{ServiceHeaders/clientSessionKey},{Shoppingcart/OrderId,CatalogId}";
output:
"Response"
"CartResponse/{StatusData/ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}},{ServiceHeaders/clientSessionKey},{Shoppingcart/OrderId,CatalogId}";
-------------
input: "CartResponse/{StatusData/ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}},{ServiceHeaders/clientSessionKey},{Shoppingcart/OrderId,CatalogId}";
output:
"CartResponse"
"{StatusData/ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}},{ServiceHeaders/clientSessionKey},{Shoppingcart/OrderId,CatalogId}";
-------------
input: "ArrivalMethods/{AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}";
output:
"ArrivalMethods"
"AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter"
2。用逗号分隔,如果逗号在“{}”括号内,则不会考虑 此外,我还需要删除“{}”,如以下示例所示。
input: "{StatusData/ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod /AvailableArrivalMethodName,AvailableFFMCenter}},{ServiceHeaders/clientSessionKey},{Shoppingcart/OrderId,CatalogId}";
output:
"StatusData/ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}"
"ServiceHeaders/clientSessionKey"
"Shoppingcart/OrderId,CatalogId"
input: "ResponseCode,RespMessage,{ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter}";
output:
"ResponseCode"
"RespMessage"
"ArrivalMethods/AvailableArrivalMethod/AvailableArrivalMethodName,AvailableFFMCenter";
截断括号在两种情况下都不同。
答案 0 :(得分:2)
案例a,b和c之间的区别在于a和b在{}内部嵌入了{},而c则没有。{}坏消息,单个正则表达式无法实现。更重要的是,保证{}的平衡将是噩梦。
无论如何,你在这里描述的基本上是一种语言,所以最好为它构建一个解析器(手动或使用像ANTLR或JavaCC这样的工具)。
答案 1 :(得分:0)
如您所描述的这个问题可以仅使用字符串比较和操作来解决,不需要正则表达式。尝试编写一种方法,将每种情况分解为单独的条件并相应地处理它,例如:
public String[] parseInput(String s) {
if (s.startsWith("Response/") || s.startsWith("CartResponse/")) {
// Examples (1.a), (1.b)
return str.split("/", 2);
} else if (str.startsWith("ArrivalMethods")) {
// Example (1.c)
String[] ss = str.split("/", 2);
ss[1] = ss[1].substring(1, ss[1].length() - 1);
return ss;
} else if (s.startsWith("{")) {
// Example (2.a)
// ...
}
return null;
}