用于检测非空白的TCL regexp

用于检测非空白的TCL regexp,regex,tcl,Regex,Tcl,我将tcl正则表达式应用于这2个数据,我想提取第2列数据: 1: Common point: rt123_345_no/qwe_rty/sdf34x56/CFR 2: Common point: NA 此正则表达式适用于第一个数据,但不适用于第二个数据: regexp -inline -expanded -- {Common\spoint:\s+?(\S+)\s+} $line 我不明白为什么正则表达式不起作用。请告知。有两个问题: NA之后没有空格,因此,最后一个\s+无论如何都会使匹

我将tcl正则表达式应用于这2个数据,我想提取第2列数据:

1: Common point:  rt123_345_no/qwe_rty/sdf34x56/CFR
2: Common point: NA
此正则表达式适用于第一个数据,但不适用于第二个数据:

regexp -inline -expanded -- {Common\spoint:\s+?(\S+)\s+} $line
我不明白为什么正则表达式不起作用。请告知。

有两个问题:

  • NA
    之后没有空格,因此,最后一个
    \s+
    无论如何都会使匹配失败
  • \s+?
    惰性模式设置分支的贪婪性,
    \s+
    将表现为
    \s+?
    ,只从
    NA
    捕获一个
    N
    ,因为
    +?
    惰性量词使正则表达式引擎尽可能少地匹配量化模式的字符
使用


我会在RE的末尾加上一个
\y
,以强制匹配在单词边界上停止()@DonalFellows是的,可能。此外,如果必须有空格或字符串结尾,则
\s+
可以替换为
(?:\s+\Z)
,甚至可以替换为类似
(?!\s)
的前瞻。对于当前场景。
Common\spoint:\s+(\S+)