2016-05-17 40 views
-2

一個文本文件,如下圖所示:如何使用regexp獲得「52:178/179'XXX BBB'」?

1:1/1988 'XX' 
1:2/1988 'BB' 
... 
1:1987/1988 'Target1' 
1:1988/1988 'XXX' 
2:1/1785 'XDS' 
... 
2:1784/1785 'Target2' 
... 

我如何通過使用TCL正則表達式得到目標1目標2? 非常感謝。

對不起,我想你是誤解我的問題。

我的觀點是\ d +:n-1個/Ñ '目標'。

有什麼辦法可以得到這個嗎?

我使用它來獲取目標。

if {[regexp {\d+:(\d+)/(\d+) +'(\w+)'} $str vv Num1 Num2 Target] } { if {[expr $Num2 - $Num1]==1} { GET TARGET... } }

我只是想知道是否有任何智能的方式來獲得目標???

再次感謝。

+0

你想'** Target1 **或'Target1'? – heemayl

回答

0

使用模式分組:

\*\*([^*]+)\*\* 

或者使用lookarounds:

(?<=\*\*)[^*]+(?=\*\*) 

Demo

1

要在TCL逃避asterisk(*),你需要\\

從字符串中提取子你需要group capturing這是在正則表達式

試試這個(.*)

;# For example 
set var "1:1987/1988 '**Target1**'" 
regexp ".* \'\\*\\*(.*)\\*\\*\'" $var match match1 
puts $match1 ;# Gives Output Target1 

爲了從整個文件substring

set fd [open "filename.txt" r] 
while {[gets $fd line] >= 0} { 
    if {[regexp ".* \'\\*\\*(.*)\\*\\*\'" $line match match1]} { 
     puts $match1 
    } 
} 

文檔:regexpgroup-capturing