замена строки tcl

$arg=TEST #### Requested, NOT AVAILABLE psy #;

У меня есть строка выше, где # создается динамически. Мне нужно использовать функцию в tcl для замены строки. В основном мне нужно удалить запятую (,) из приведенного выше выражения и отобразить его как

ТЕСТ #### Запрошено НЕДОСТУПНО psy #

Вот что я сделал, но это не работает.

regsub -all {"Requested,"} $arg {"Requested"} arg

Здесь я ссылался на функцию из: http://www.tcl.tk/man/tcl8.5/TclCmd/regsub.htm


tcl
person Micheal    schedule 10.04.2012    source источник


Ответы (3)


Проблема в вашем цитировании. Фактически вы проверяете строку "Requested," (включая кавычки), но это не то, что вам нужно. Попробуйте избавиться от фигурных скобок (}) или двойных кавычек ("):

set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg

Если все, от чего вам нужно избавиться, это запятая, вы можете найти / заменить ее (просто замените ее пустой строкой ""):

regsub -all "," $arg "" arg

or

regsub -all {,} $arg {} arg

Как упоминал комментатор, последнее может быть лучше в общем случае, поскольку регулярные выражения часто содержат много обратных косых черт (/), а {} скобки не требуют большого количества отвлекающих дополнительных обратных косых черт, как это делают "" кавычки.

person Adam Batkin    schedule 10.04.2012
comment
Я рекомендую (почти) всегда заключать регулярные выражения в фигурные скобки; они, как правило, содержат много обратных косых черт (особенно в любом нетривиальном случае), а фигурные скобки облегчают их написание. Заключение их в кавычки приводит к обратному слешиту… - person Donal Fellows; 11.04.2012

Другой вариант, менее сложный, чем регулярное выражение, - [string map].

set arg [string map { , "" } $arg]

Если вы не хотите глобального удаления:

set idx [string first , $arg]
set arg [string replace $arg $idx [incr idx]]
person glenn jackman    schedule 10.04.2012

person    schedule
comment
Хотя ваш ответ может быть правильным, следует по возможности избегать ответов только на основе кода. Всегда лучше добавить объяснение того, что делает код и как он решает проблему OP. Спасибо ! - person 2Dee; 20.06.2014