基于java中的模式匹配的字符串拆分问题

时间:2016-09-18 03:25:28

标签: java string split pattern-matching

我想将GigabitEthernet0/1分为GigabitEthernet0/1。 我试过用,

str.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

但没有得到正确的结果。我应该使用什么样的模式。第二部分不仅仅是数字,它还包含&#34; /&#34;。

在我的用例中,我可能还有GigabitEthernet0,可以将其分为GigabitEthernet0

什么是正确的正则表达式?

3 个答案:

答案 0 :(得分:1)

试试这个正则表达式

([a-zA-Z]+)([0-9\/.:]+)

适用于

GigabitEthernet0/1 --> interface on chassis/card
GigabitEthernet0/1.1 --> interface with sub interface
Serial0/1/1:1.1 --> channelized serial/POS interface
GigabitEthernet0 --> interface on chassis (In some Cisco IOS devices)

https://regex101.com/r/eP7kL3/1

答案 1 :(得分:0)

我尝试了以下正则表达式来拆分

String gigaByteWithSlash = "GigabitEthernet0/1";
String gigaByteWithoutSlash = "GigabitEthernet0";
//String[] part = gigaByte.split("(?<=\\D)(?=\\d/\\d)");
String[] part00 = gigaByteWithSlash.split("(?<=[a-zA-Z])(?=\\d)");
System.out.println(part00[0]);
System.out.println(part00[1]);

String[] part01 = gigaByteWithoutSlash.split("(?<=[a-zA-Z])(?=\\d)");
System.out.println(part01[0]);
System.out.println(part01[1]);

打印

GigabitEthernet
0/1
GigabitEthernet
0

答案 2 :(得分:0)

String[] part = gigaByte.split("(?<=[\\w&&\\D])(?=\\d)"); 

适用于我上述两种情况。