我想从 tcl 中的字符串中删除特定模式

I wanted to remove particular pattern from a string in tcl

hreset_error_status_t2_reg1 htrans_flag_t1_reg2 hsize_flag_error_reg check_hwdata_reg

我必须使用正则表达式编写 Tcl 脚本我必须删除 error_status、flagflag_error,并检查 在以下字符串中。它必须在文件中搜索以下关键字,并且必须删除字符串中提到的关键字。

要从字符串中删除所有这些模式,请使用 regsub -all。如果您不需要使用正则表达式的强大功能,那么 string map 也可以。

set my_str "hreset_error_status_t2_reg1 htrans_flag_t1_reg2 hsize_flag_error_reg check_hwdata_reg"
set my_regex {error_status_|flag_(error_)?|check_}
regsub -all $my_regex $my_str ""
  --> hreset_t2_reg1 htrans_t1_reg2 hsize_reg hwdata_reg

set my_map {
   error_status_  ""
   flag_error_    ""
   flag_          ""
   check_         ""
}
string map $my_map $my_str
   --> hreset_t2_reg1 htrans_t1_reg2 hsize_reg hwdata_reg

请注意,我在 $my_map 中将 flag_error_ 放在 flag_ 之前,这样只有 flag_error 中的 flag_ 个字符没有被删除。