2016-04-18 11 views
0

Ich wollte ein Zeichen in einer Zeichenfolge ersetzen, basierend auf Mustererkennung. Der Variablenwert von temp wird vom Benutzer angegeben und darf kein vorangestelltes "m" haben. Aber im Fall, dass es einen vorhergehenden m hat, möchte ich das Zeichen m durch "-" ersetzen (Minuszeichen). so, wenn der Wert von temp"m40" ist, dann temp1 sollte wie folgt aussehen "-40" Hier ist, was ich versucht habe, aber es funktioniert nicht gut:TCL: suche und ersetze ein Zeichen in der Zeichenfolge

set temp "m40c" 
if {regexp ^m $temp match} { 
    regsub m $temp "-" $temp1 
    puts $temp1 
} 

Antwort

1

ich diesen Code versucht habe und es funktioniert für mich. .. verpasste einfach die [] Klammern um regexp.

set temp "m40c" 
if {[regexp ^m $temp match]} { 
regsub m $temp "-" temp1 
puts $temp1 
} 
1

Sie können sofort die regsub Befehl verwenden.

% set temp "m40c" 
m40c 
% regsub m $temp - result 
1 
% set result 
-40c 
% set temp "40c" 
40c 
% regsub m $temp - result2 
0 
% set result2 
40c 
% 
+2

Sie vermissen den Anker. Dies ersetzt das erste 'm' in $ temp. –

2

Regexp, in der Abov-Beispiel ist redundant. regsub wird ersetzen, wenn es eine Übereinstimmung findet. Andernfalls wird kein Fehler ausgegeben.

% regsub "^m" $temp "-" temp1 
1 
% set temp1 
-40c 
% set temp "xm40c" 
xm40c 
% regsub "^m" $temp "-" temp2 
0 
% set temp2 
xm40c 
% 

Also, so etwas wie dies kann nützlich sein:

puts "Original value: $temp" 
if {[regsub "^m" $temp "-" temp]} { 
    puts "Updated value: $temp" 
} 
0

oder in einer Zeile,

set temp [regsub {^\s*m} $temp "-"] 

wenn Sie M oder m (Groß- und Kleinschreibung)

ersetzen
set temp [regsub -nocase {^\s*m} $temp "-"] 
Verwandte Themen