我正努力尝试在文本文件的一组行中捕获多个匹配项。
数据采用一堆格式,例如
AO22_X1N_A9PP96CTS_C24 SYN_INC_187(.A0(test_so6),.A1(n2218) , .B0(U_PAUSEdata_ff_int_28_),.B1(n2),.Y(n2597));
NAND3_X1R_A9PP96CTUL_C16 SYN_INC_154(.A(n1563), .B(U_PAUSEwcnt),.C(n1640),.Y(n1467));
第一部分是名称。以后可能想要Tat,但现在我对端口ex .A(net)感兴趣 理想情况下,我想捕获所有输入的网络名称(具有A,B,C,D等的名称)和单个输出.Y(网络)
最终,我想将它们存储到一个散列中,其中输出网络是键,数据是对输入数组的引用,但现在我只是试图捕获所有输入网络。
这就是我目前正在使用的
open (FILE, "<maca") or die("Can not open $file");
while (defined(my $cur_line = <FILE>)) {
if ($cur_line =~ m/[A-Z].*?\.[A-C]\d* \( (.*?) \).*?;/mg) {
print "THIS gate $cur_line $1 $2 $3\n";
}
}
我正在尝试这种显示方式
此门NAND3_X1R_A9PP96CTUL_C16 SYN_INC_154(.A(n1563), .B(U_PAUSEwcnt),.C(n1640),.Y(n1467));
n1563 U_PAUSEwcnt n1640
但是我明白了。其实我不在乎第一行,只是第二行。首先是用于调试。我认为m将搜索多行,而g将全局匹配多行字符串。我想念什么
此门.B(U_PAUSEwcnt),.C(n1640),.Y(n1467));
n1640
答案 0 :(得分:0)
如果我对您的理解正确,那么您正在寻找这样的东西:
while ($data =~ /(\w+)\s*\((.+?)\)\s*;/gm) {
my $line = $1;
my $vals = $2;
while ($vals =~ /\.(\w+)\s*\(\s*(\w+)\s*\)/g) {
print "$line .. $1: $2.\n"
}
}
我将变量$data
命名为变量( .. )
,因为它包含所有行-对吗?
我首先将各行分开,捕获\w
之间的字符串,然后取出键值对。看起来所有名称都是字母数字+“ _”,每个---
apiVersion: v1
kind: Pod
metadata:
name: fail-422f98fc
labels: {}
annotations: {}
spec:
containers:
- name: base
image: python:3.6.6-stretch
command: echo
imagePullPolicy: IfNotPresent
args: '10'
restartPolicy: Never
nodeSelector: {}
volumes: []
serviceAccountName: default
affinity: {}
都可以很好地捕获它。
希望这有帮助吗?