2016-04-18 3 views
0

Я хотел заменить символ в строке на основе соответствия шаблону. Значение переменной temp задается пользователем и может иметь или не иметь предшествующие «m». Но в случае, если у него есть предыдущий m, я хочу заменить символ m на "-" (знак минуса). так, если значение temp является "m40", то temp1 должен выглядеть "-40" Вот что я пытался, но он не работает:TCL: поиск и замена символа в строке

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

ответ

1

Я попробовал этот код и он работает для меня. .. просто пропустили [] скобки вокруг регулярного выражения.

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

Вы можете сразу использовать команду regsub.

% 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

Вам не хватает якоря. Это заменит первый «m», найденный в $ temp. –

2

regexp, в примере abov избыточно. regsub заменит, если найдет совпадение. В противном случае это не вызывает никакой ошибки.

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

Так, что-то подобное может быть полезно:

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

или в одной строке,

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

если вы хотите заменить М или м (чувствительно к регистру)

set temp [regsub -nocase {^\s*m} $temp "-"] 
Смежные вопросы