有一个文本文档,解析每一行的数据每一行的数据内容是这样的(A,Z表示两个机器):Adev:Aslot(-/_)Aport-Zdev:Zslot(-/_)Zport其中Adev是A设备名称,除了字母数字外可能包含减号和下杠两个符号:- 或 _
ASlot是A设备插槽,这是一组字母+数字的字符串,其中不包含任何符号,首位必为字母;
Aport是A设备端口,除了字母数字外可能包含冒号、减号或#,即 : 或 - ,但是,出现-时,减号前肯定是STM或OPS,例如STM1:1、STM-16#1、OPS-3,有时只有一个WZ设备规则的与A设备相同。在这些dev,slot,port间有符号相连:
dev和slot的连接符号必为冒号 ":"(没有引号)
slot和port的链接符是减号或下杠: - 或 _
port后面是A和Z的连接符,必为减号 - 由此从数据中解析出adev,aslot,aport,zdev,zslot,zport给出一些数据的例子:(为了大家看明白我用空格将六个数据隔开)
bsfgs : A1 - STM-4#1 - BSB : I5 - STM-4#1
KM-DZH 155_7470 : MS _ STM1:1 - SD2 : I7 - STM-1#5
DZDD : I6 - STM-1#1 - DZH-KM 155_7470 : MS _ STM1:1
SD : I6 - STM-1#11 - 4LOU-155M(HUAWEI-wantong) : MS _ STM1:1数据量一般为千行左右,效率可以不用太高求正则达人啊!
ASlot是A设备插槽,这是一组字母+数字的字符串,其中不包含任何符号,首位必为字母;
Aport是A设备端口,除了字母数字外可能包含冒号、减号或#,即 : 或 - ,但是,出现-时,减号前肯定是STM或OPS,例如STM1:1、STM-16#1、OPS-3,有时只有一个WZ设备规则的与A设备相同。在这些dev,slot,port间有符号相连:
dev和slot的连接符号必为冒号 ":"(没有引号)
slot和port的链接符是减号或下杠: - 或 _
port后面是A和Z的连接符,必为减号 - 由此从数据中解析出adev,aslot,aport,zdev,zslot,zport给出一些数据的例子:(为了大家看明白我用空格将六个数据隔开)
bsfgs : A1 - STM-4#1 - BSB : I5 - STM-4#1
KM-DZH 155_7470 : MS _ STM1:1 - SD2 : I7 - STM-1#5
DZDD : I6 - STM-1#1 - DZH-KM 155_7470 : MS _ STM1:1
SD : I6 - STM-1#11 - 4LOU-155M(HUAWEI-wantong) : MS _ STM1:1数据量一般为千行左右,效率可以不用太高求正则达人啊!
比如你没有说它有空白符,但是的确有空白符:
KM-DZH 155_7470 : MS _ STM1:1 - SD2 : I7 - STM-1#5
再比如你没有说他有括号 但是的确有括号
SD : I6 - STM-1#11 - 4LOU-155M(HUAWEI-wantong) : MS _ STM1:1
至于“设备端口”,你的解释只能用“不伦不类”来形容。好了贴程序,如果不能处理文件中的其他数据,请把你的样本文件发到[email protected],OK?import java.io.*;
import java.util.regex.*;public class ResolveFile {
public static void main(String[] args) {
resolveFile("c:/test.txt"); //我把你的测试存入到此文件,并去除空白符,每一条目占一行
}
public static void resolveFile(String fileName){
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(fileName)); String string;
while ((string = br.readLine()) != null) {
resolveLine(string);//读取一行,并解释一行
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
public static void resolveLine(String sourceString){
String regex = "^([A-Za-z0-9\\-_()\\s]+?)[:]([A-Za-z][A-Za-z0-9]*?)[\\-_](STM[0-9\\-#:]+?[\\d]+)[\\-]([A-Za-z0-9\\-_()\\s]+?)[:]([A-Za-z][A-Za-z0-9]*?)[\\-_](STM[0-9\\-#:]+?[\\d]+)$";
Matcher matcher = Pattern.compile(regex).matcher(sourceString);//
while(matcher.find()){ //将每一行解释出的两个设备相关信息打印出来
System.out.println(matcher.group());//所有信息
System.out.println(matcher.group(1));//设备1名称
System.out.println(matcher.group(2));//设备1插槽
System.out.println(matcher.group(3));//设备1端口
System.out.println(matcher.group(4));//设备2名称
System.out.println(matcher.group(5));//设备2插槽
System.out.println(matcher.group(6));//设备2端口
}
}
}
/*output:
bsfgs:A1-STM-4#1-BSB:I5-STM-4#1
bsfgs
A1
STM-4#1
BSB
I5
STM-4#1
KM-DZH 155_7470:MS_STM1:1-SD2:I7-STM-1#5
KM-DZH 155_7470
MS
STM1:1
SD2
I7
STM-1#5
DZDD:I6-STM-1#1-DZH-KM 155_7470:MS_STM1:1
DZDD
I6
STM-1#1
DZH-KM 155_7470
MS
STM1:1
SD:I6-STM-1#11-4LOU-155M(HUAWEI-wantong):MS_STM1:1
SD
I6
STM-1#11
4LOU-155M(HUAWEI-wantong)
MS
STM1:1
*/