Regex tcl:使用正则表达式循环和提取

Regex tcl:使用正则表达式循环和提取,regex,tcl,Regex,Tcl,我有大量数据,我想根据两个条件提取两种类型的数据。我编写了一个tcl脚本,使用regex(新手到regex)提取数据 我使用了以下条件,该条件工作良好,并产生部分所需输出: if [regexp {\+ ([0-9.]+) 1 2.*- } $line -> time ] { 我在脚本的某个地方使用可变时间。上述条件产生以下o/p(由于文件较大,这只是一个示例): 然后,在上面的if条件中,我想检查第9列: //condition 1 if (9th between [3-6].*) (

我有大量数据,我想根据两个条件提取两种类型的数据。我编写了一个tcl脚本,使用regex(新手到regex)提取数据

我使用了以下条件,该条件工作良好,并产生部分所需输出:

if [regexp {\+ ([0-9.]+) 1 2.*- } $line -> time ] {
我在脚本的某个地方使用可变时间。上述条件产生以下o/p(由于文件较大,这只是一个示例):

然后,在上面的if条件中,我想检查第9列:

//condition 1
if (9th between [3-6].*) ( such as 3.78,6.7, 5.9)
第二个条件是:

  //condition 2
if (9th between [7-14].*) ( such as 14.19,12.18,10.19, 9.19,.....)
我正与上述两种情况作斗争。我尝试了以下操作,但没有出现错误,但是没有出现匹配

condition 1:
if [regexp {\+ ([0-9.]+) 1 2.*-* ([3-9])\..*/ } $line ] {
我知道我在重复主if条件的一部分,因为我不知道如何跳过这些列

condition 2:
 if [regexp {\+ ([0-9.]+) 1 2.*-* ([7-9]|1[0-4])\..*/} $line ] {
任何建议

匹配7-14
\+([0-9.]+)12.*-\d++\s(?[7-9]|1[0-4])


匹配3-6
\+([0-9.]+)12.*-\d++\s[3-6]

为什么不在空间上拆分?您可以通过多使用几行代码来实现几乎相同的结果。它具有可读性,人们可以更好地理解代码:

if [regexp {\+ ([0-9.]+) 1 2.*- } $line -> time] {
    set elements [split $line " "] ;# You can actually omit the " " in this case
    set 9th [lindex $elements 8]

    # Condition 1
    if {$9th >= 3 && $9th < 7} { do something }

    # Condition 2
    if {$9th >= 7 && $9th < 15} { do something }
}
if[regexp{\+([0-9.]+)12.*-}$line->time]{
set elements[split$line”“];#在本例中,您实际上可以省略“”
第9组[lindex$elements 8]
#条件1
如果{$9th>=3&&$9th<7}{做点什么}
#条件2
如果{$9th>=7&&$9th<15}{做点什么}
}

未打印任何内容!!条件不是真的!!也许如果你把整个condition@SimpleNEasy,我已经附上了演示的链接。关于风格:我觉得这样更可读
{3@glennjackman哦,我想我知道你的意思。这更像是
3@Jerry的数学显示,你是绝对正确的。这是如此的可读性和便于以后的更改。
if [regexp {\+ ([0-9.]+) 1 2.*- } $line -> time] {
    set elements [split $line " "] ;# You can actually omit the " " in this case
    set 9th [lindex $elements 8]

    # Condition 1
    if {$9th >= 3 && $9th < 7} { do something }

    # Condition 2
    if {$9th >= 7 && $9th < 15} { do something }
}