正则表达式解析可能会或可能不会被分隔的字符串;分成几组

时间:2012-10-18 12:20:27

标签: java regex string regex-group

我有一个案例,我需要根据标准将字符串解析成几个组

例如以下内容;

01%3A%35r%07%01P%88%00;WAP_GPRS

应该是2组

%3A%35r%07%01P%88%00
WAP_GPRS

请注意,我在开始时并不关心01,并且可以有0个或更多个子字符串;我需要他们所有人在他们自己的小组。

另一个;

01%3A%35r%07%01P%88%00;KPN;A23B

应该是3组:

%3A%35r%07%01P%88%00
KPN
A23B

基本上,我不需要关心alpha或数字是否优先。问题是将表达式分组为自己的表达式,可以是0次或更多次。含义如下

01%3A%35r%07%01P%88%00

还应该生成一组%3A%35r%07%01P%88%00

3 个答案:

答案 0 :(得分:2)

为什么不只是split ;上的字符串01

但在此之前,您需要使用%在第一个String#substring之前移除required,因为您没有在 String str = "01%3A%35r%07%01P%88%00;WAP_GPRS"; // Remove `01` before first `%` str = str.replace(str.substring(0, str.indexOf("%")), ""); String[] groups = str.split(";"); System.out.println(Arrays.toString(groups)); 输出中显示: - < / p>

[%3A%35r%07%01P%88%00, WAP_GPRS]

输出: -

{{1}}

答案 1 :(得分:2)

您不需要正则表达式:

String data = "01%3A%35r%07%01P%88%00;KPN;A23B"

String groups = s.split(";")

for (String s: groups ){
     System.out.println(s); // I'm printing each separate group
}

删除原始字符串的前两个字母是另一个与组分隔无关的事情,您可以使用子字符串方法来完成。

答案 2 :(得分:1)

所以我猜你需要一个正则表达式的分裂模拟。这需要重复捕获组。

坏消息,有些人已经研究过类似的问题而没有找到正确的答案: https://stackoverflow.com/a/6836024/1665128

好消息是,如果您可以对组的数量有一些合理的限制,并且您可以添加一些代码来识别空的尾随,这可能会有所帮助:

([^;]*);?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?