2017-09-13 120 views
0

我申请TCL正则表达式来这2个数据,我想提取第二列数据:TCL正则表达式,用于检测非空白

1: Common point: rt123_345_no/qwe_rty/sdf34x56/CFR 
2: Common point: NA 

此正则表达式适用于第1个数据,但不会进行第二次工作数据:

regexp -inline -expanded -- {Common\spoint:\s+?(\S+)\s+} $line 

我不明白为什么正则表达式不起作用。请指教。

回答

2

这里有两个问题:

  • 没有空格NA后,因此,最后\s+将在这里失败的比赛通过各种手段
  • \s+?懒惰模式设置为分公司的贪婪,和该\S+将表现为\S+?,从NA捕捉只是一个N因为+?懒惰量词使得正则表达式引擎匹配的匹配量化模式尽可能少字符。

使用

Common\spoint:\s+(\S+) 
+0

我把一个'\ y'上,稀土结束,迫使比赛停止字边界(http://www.tcl.tk/man /tcl8.6/TclCmd/re_syntax.htm#M72) –

+0

@DonalFellows是的,可能的。另外,如果必须有空格或字符串结尾,'\ s +'可以用'(?:\ s + | \ Z)'替换,甚至可以用'(?!\ S)'替代。 [这一切似乎都有效](https://ideone.com/JUdATM)。 –