我从文件名中提取电压的数值数据。该名称包含三个此类数据,但regexp仅返回2.
set data "blabla_0p500v_0p530v_0p550v_m25c_foo.dat"
regexp -all -inline {_(\dp\d{3})v_} $data
返回:
_0p500v_ 0p500 _0p550v_ 0p550
我在期待:
_0p500v_ 0p500 _0p530v_ 0p530 _0p550v_ 0p550
不确定缺少什么。
感谢您的帮助。
答案 0 :(得分:2)
使用积极的前瞻:
_(\dp\d{3})v(?=_)
这样下面的下划线不会被消耗,并且可以在下一次迭代时匹配。
在匹配的部分附加_
:
set output [regexp -all -inline {_(\dp\d{3})v(?=_)} $data]
set index 0
foreach item $output {
puts [expr {$index % 2 == 0 ? "$item\_": $item}]
incr index
}