2016-05-17 1 views
-2

Eine Textdatei unten wie:Wie bekomme ich "52: 178/179 'XXX BBB'" mit regexp?

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

Wie kann ich Target1 und Target2 von regexp in tcl mit? Vielen Dank.

Sorry Leute, ich glaube, du verstehst meine Frage falsch.

Mein Punkt ist \ d +: n-1/n 'Target'.

Gibt es irgendwelche Möglichkeiten, dies zu bekommen?

Ich benutze dies um Ziele zu bekommen.

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

Ich will nur, wenn es eine intelligente Art und Weise wissen Ziel zu bekommen ???

Nochmals vielen Dank.

+0

Haben Sie erhalten möchten '** Target1 ** 'oder' Target1'? – heemayl

Antwort

0

Mit Muster Gruppierung:

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

Oder mit lookarounds:

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

Demo

1

asterisk(*) in TCL zu entkommen, müssen Sie \\

Um String von String extrahieren Sie brauche group capturing, die (.*) in regexp ist

die Sie interessieren,

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

substring aus ganzen Datei

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

Dokumentation, zu extrahieren: regexp, group-capturing