2016-09-18 100 views
1

我想将GigabitEthernet0/1分割为GigabitEthernet0/1。 我尝试使用,基于java中模式匹配的字符串分割问题

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

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

在我的使用案例中,我也可能有GigabitEthernet0,它可以拆分为GigabitEthernet0

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

+0

另外要注意,如果你正在处理IOS配置,你需要考虑到的子接口:'Serial0/0.14'。 – chrylis

回答

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 
+0

谢谢。但是,当我有GigabitEthernet0时,这不起作用。 Tried String [] part = gigaByte.split(“(?<= \\ D)(?= \\ d)”);但是这对GigabitEthernet0/1不起作用 – nisha

+0

只做了编辑,适用于G..0和0/1 –

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

同时适用于我上述的情况。

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