如何从tcl中的正则表达式模式中从列表的第二项中提取第二组

时间:2019-10-02 08:17:31

标签: tcl

如何从列表的第二项中提取第二组。 我正在打印所有结果以供查看。

从中提取日期:

<span class="rel_date">26 Sep at 12:18 am</span>
(...)
    set result [regexp -inline -all -line {(?:class="rel_date">)(.*)(?:<\/sp)} [http::data $token]]
    foreach j $result {
        foreach {group0 group1 group2} $j {
        puts $group1
        }       
    }
(...)

1 个答案:

答案 0 :(得分:0)

您处在正确的轨道上。您不需要外部的foreach

set result [regexp -inline -all -line {(?:class="rel_date">)(.*)(?:<\/sp)} [http::data $token]]
foreach {group0 group1} $result {
    puts $group1
    # => 26 Sep at 12:18 am
}

结果中实际上只有两组。一个包含主要匹配项,第二个包含第一个捕获组(( ... )是捕获组,但(?: ... )不是)

如果您在同一页面上碰巧有很多这样的跨度,则上面的循环仍然有效:

set page {
    <span class="rel_date">26 Sep at 12:18 am</span>
    <span class="rel_date">26 Sep at 12:19 am</span>
}

set result [regexp -inline -all -line {(?:class="rel_date">)(.*)(?:<\/sp)} $page]
foreach {group0 group1} $result {
    puts $group1
}
# => 26 Sep at 12:18 am
# => 26 Sep at 12:19 am