正则表达式将字符串拆分为第一个斜杠&逗号有条件

时间:2011-03-10 18:49:48

标签: java regex string split

我需要两个不同的Regex来分割字符串,适用于以下场景。 使用 Java 平台。

1。只需要第一个“/”就可以拆分,如果斜线在“{}”括号内,则不会考虑它    而且我还需要截断开始和结束大括号“{}”,只有它类似于示例c)。

A)

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

b)中

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

c)中

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";

截断括号在两种情况下都不同。

2 个答案:

答案 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;
}