String 3行内容为:"NOR3 g841(.A (n_14), .B (encoder_in[13]), .C (encoder_in[5]), .Q (n_17));",
"BUF g844(.A (n_22), .Q (n_15));", 
"NAND2 g847(.A (n_13), .B (n_1), .Q (n_14));",第一行取出 NOR3  g841  n_14  encoder_in[13]  encoder_in[15]   n_17第二行 取出 BUF  g844  n_22  n_15第三行取出   NAND2  g847  n_13   n_1  n_14每一组对应放到  name, order, a,b,c,d,q,nq 几个串中  没有的不放  比如第一行name - NOR3
order - g841
a - n14
b - encoder_in[13]
c - encoder_in[15]
d - null
q - n_17
nq - null第二行
name - BUF
order - g844
a - n_22
b - null
c - null
d - null
q - n_15
nq - null谢谢各位高手了 

解决方案 »

  1.   

    供参考:
    import java.util.ArrayList;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class GetCircul {    public static void main(String[] args) {
            String[] lines = { "NOR3 g836(.A (n_18), .B (n_42), .C (n_22), .Q (n_29));", "BUF g837(.A (n_25), .Q (n_21));",
                    "NAND3 g838(.A (n_17), .B (n_20), .C (n_19), .Q (n_25));", "BUF g840(.A (n_17), .Q (n_18));",
                    "NAND2 g843(.A (n_15), .B (n_11), .Q (n_23));",
                    "NOR3 g841(.A (n_14), .B (encoder_in[13]), .C (encoder_in[5]), .Q (n_17));",
                    "BUF g844(.A (n_22), .Q (n_15));", "NAND2 g847(.A (n_13), .B (n_1), .Q (n_14));",
                    "NAND2 g845(.A (n_12), .B (n_8), .Q (n_22));", "NAND2 g846(.A (n_11), .B (n_6), .Q (n_42));",
                    "BUF g848(.A (n_13), .Q (n_10));" };
            //Pattern pat = Pattern.compile("\\.\\w\\s*\\(([^\\)]*)");
            Pattern pat = Pattern.compile("([^\\s]+)\\s" // name
                    + "([^(]+)" // order
                    + "\\(" // 左括号
                    + "(?:\\.A\\s*\\(([^)]+)\\))?" // A
                    + ",?\\s?" // 分割
                    + "(?:\\.B\\s*\\(([^)]+)\\))?" // B
                    + ",?\\s?" // 分割
                    + "(?:\\.C\\s*\\(([^)]+)\\))?" // C
                    + ",?\\s?" // 分割
                    + "(?:\\.D\\s*\\(([^)]+)\\))?" // D
                    + ",?\\s?" // 分割
                    + "(?:\\.Q\\s*\\(([^)]+)\\))?" // Q
                    + ",?\\s?" // 分割
                    + "(?:\\.NQ\\s*\\(([^)]+)\\))?" // NQ
                    + "\\)" // 右括号
            );
            
            ArrayList<VO> results = new ArrayList<VO>(); // 存放结果集
            for (String str : lines) {
                Matcher m = pat.matcher(str); // 借助正则表达式循环定位:括号中的参数
                if (m.find()) {
                    VO vo = new VO(); // 值对象
                    vo.name = m.group(1);
                    vo.order = m.group(2);
                    vo.a = m.group(3);
                    vo.b = m.group(4);
                    vo.c = m.group(5);
                    vo.d = m.group(6);
                    vo.q = m.group(7);
                    vo.nq = m.group(8);
                    results.add(vo);
                }
            }
            
            System.out.println(results); // 所有结果集
        }
    }class VO {
        String name, order, a, b, c, d, q, nq;
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append(name).append("\t");
            sb.append(order).append("\t");
            sb.append(a).append("\t");
            sb.append(b).append("\t");
            sb.append(c).append("\t");
            sb.append(d).append("\t");
            sb.append(q).append("\t");
            sb.append(nq).append("\n");
            return sb.toString();
        }
    }