output [15:0] pin;
output [1:0] en;
input [6:0] dddr;
input [6:0] dbg;
将此替换为(我正在计算总线数)
16 : pin : output;
2 : en : output;
7 : dddr : input;
7 : dbg :input;
我尝试了这个代码后,打开文件,并将其存储在var.,但我不能过滤它像上面
if ($var =~ /(\w+)\[(\d+)\:/) {
print "word=$1 number=$2\n";
}
//我正在尝试添加:在列的中间还
3条答案
按热度按时间6mzjoqzu1#
You are missing the whitespace after the word characters in your pattern.
This is easily fixed. Add it into the pattern in between, like so:
This produces:
To get to your desired output, you'll have to refine the pattern and probably do some incrementing too.
u4vypkhs2#
您没有考虑
(\w+)
和正则表达式的(\d+)
部分之间的空格。输出这个
为了接近您的最终需求,可以扩展正则表达式以匹配您需要的其他部分,如下所示
输出此
不确定如何计算第一列的值。它似乎是数字字段+ 1。是否正确?
nle07wnf3#
解析所示数据的一种方法
以下是一些评论。
在大多数正则表达式模式中,很大程度上取决于输入数据格式的细节,以及期望和允许的数据的灵活性。
\S+
匹配一个非空白字符串;假设开头有一个单词,可以包含任何非空格字符。如果可能有多个单词,则使用.+?
代替,它匹配所有到以下模式的第一个示例(这里是;
,所以更好的是,可以使用[^;]+
)\S
,因为没有告诉任何关于数据的内容。[]
内不允许有空格,只能是数字之间有:
。如果数据可以有空格,则使用\[\s*
和\s*\]
\S+
匹配,其中包含任何非空格字符。如果预期会有多个单词,则再次使用.+?
。该部分甚至可能包含分号,在这种情况下,您需要.+
,它包含 * 所有 * 内容,直到最后一个;
+
要求前面的模式至少出现一次。如果可以接受数据中的那个位置没有任何内容(例如,最后一个单词缺失),那么就使用量词*
代替,比如.*
因此,尽可能多地了解数据是什么样的,并仔细阐明要求,明确限制/允许什么是重要的。