【问题标题】:TCL regsub pattern to another patternTCL regsub 模式到另一个模式
【发布时间】:2021-03-26 15:22:45
【问题描述】:

如何将模式注册到另一个模式

set a "how1how ku2ku how2how" ; regsub "how*how" $a "oo_how\*how_oo"

我希望所有名称“how(num)how”都将交换为具有前缀和后缀的相同名称 但上面的 regsub 现在对我有用

【问题讨论】:

  • 我想了解你想在这里实现什么。 你想得到什么输出字符串?oo_how1oo_how ku2ku oo_how2oo_how吗?

标签: tcl


【解决方案1】:

一个捕获组通常后跟一个反向引用:

% set a "how1how ku2ku how2how"
how1how ku2ku how2how
% regsub -all {how([0-9]+)how} $a {oo_how\1how_oo}
oo_how1how_oo ku2ku oo_how2how_oo

Documentation for the syntax


跟随cmets,我想你所追求的可能是这样的吧?

set word "how"
set a "how1how ku2ku how2how"
regsub -all [format {%s([0-9]+)%s} $word $word] $a [format {oo_%s\1%s_oo} $word $word]

format 允许进行一些替换,其中字符串 %s 将被提供的参数替换。

【讨论】:

  • 是否有任何不同的方式来替换字符串,但原词和新词将是前缀和后缀的除外? command {word to replace} $a oo_{word to replace}_oo
  • @user3835935 如果你想替换子字符串的所有实例而不是正则表达式,string map [list $word oo_${word}_oo] $text。如果匹配正则表达式...嗯,这就是这个答案的目的。
  • @Shawn,$word 应该是什么来捕捉“how1how”和“how2how”?
  • @Jerry,我写了一个脚本来为我的报告中的一些字符串着色。用户可以给出他想要着色的确切字符串。在我的报告中,我们可能想要为“name_num_name”着色,而我只想在单词之前和之后添加颜色语法。我对 proc 的输入是 word to color + line。
  • 我认为它可以像regsub -all $word $string {oo_&_oo} 一样简单,只需为模式匹配添加前缀和后缀。
猜你喜欢
  • 2015-04-18
  • 2011-08-20
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多