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谢谢各位高手了
"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谢谢各位高手了
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();
}
}