2016-09-18 66 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