有一个文本文档,解析每一行的数据每一行的数据内容是这样的(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数据量一般为千行左右,效率可以不用太高求正则达人啊!

解决方案 »

  1.   

    把你的.txt发我邮箱吧 研究下 [email protected]
      

  2.   

    把你的.txt发我邮箱吧 一起研究下 [email protected]
      

  3.   

    下面的方法能对付你给出的4行数据,你的写的“设备名称”说明有错误,
    比如你没有说它有空白符,但是的确有空白符:
    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 
     
    */