TCL正则表达式没有返回预期的匹配

时间:2018-05-09 18:25:27

标签: regex tcl

我从文件名中提取电压的数值数据。该名称包含三个此类数据,但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

不确定缺少什么。

感谢您的帮助。

1 个答案:

答案 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
}

Live demo