如何使用TCL删除字符串中的字符
我有以下字符串 TCL被称为“工具命令语言”,TCL被称为“工具命令语言” 命令语言”,TCL称为“工具命令语言” 从上面的输入,我想要一个如下的输出 “TCL被称为工具命令语言,TCL被称为工具命令 语言,TCL被称为“工具命令语言”如何使用TCL删除字符串中的字符,tcl,Tcl,我有以下字符串 TCL被称为“工具命令语言”,TCL被称为“工具命令语言” 命令语言”,TCL称为“工具命令语言” 从上面的输入,我想要一个如下的输出 “TCL被称为工具命令语言,TCL被称为工具命令 语言,TCL被称为“工具命令语言” i、 e.输出中只应显示第一个和最后一个双引号,所有其他双引号都应删除,有人能告诉我实现这一点的不同方法吗。我已尝试使用regsub set str {"TCL is known as "tool command language", TCL is known
i、 e.
输出中只应显示第一个和最后一个双引号,所有其他双引号都应删除,
有人能告诉我实现这一点的不同方法吗。我已尝试使用regsub
set str {"TCL is known as "tool command language", TCL is known as "tool command language", TCL is known as "tool command language""}
puts "Input : $str"
regsub -all {(.)"} $str {\1} output
puts "Output : $output"
这将产生以下结果
Input : "TCL is known as "tool command language", TCL is known as "tool command language", TCL is known as "tool command language""
Output : "TCL is known as tool command language, TCL is known as tool command language, TCL is known as tool command language"
我使用的模式是(.)“
。在正则表达式中,atom
将匹配任何单个字符。(将在底部讨论括号用法)。然后是一个单引号。因此,基本上,这将匹配任何单个字符,并在其旁边有一个单引号,如下所示
如您所见,我们总共有6个匹配项。让我们看第二个匹配项,即e“
。我们的主要目的是删除这些引用。但是,我们匹配了两个字符。这就是我们用括号将其分组的原因
使用Tcl
,我们可以借助\1
访问第一个子组,借助\2
访问第二个子组,依此类推。最后,我们用一个字符替换这两个字符,这个字符只不过是引号以外的第一个字母。i、 e.e“
替换为字符e
请注意,开头使用了-all
标志,该标志负责匹配此模式的所有匹配项
注意:\1
应该像我提到的那样与大括号一起使用,如{\1}
。如果您想在不使用大括号的情况下访问它,您必须使用\\1
参考:您可以删除所有引号并重新添加外部引号。一种方法:
set new [format {"%s"} [string map {{"} {}} $str]]
您试图删除字符串中每边至少有一个字符的所有
“
字符。这导致了正则表达式替换:
set transformedString [regsub -all {(.)[""]+(.)} $inputString {\1\2}]
“
是加倍的,放在[
括号]
中只是为了突出显示。你可以用{(.)+(.)}
来代替。嗨,迪内什,你能告诉我它是如何匹配六次的,然后它是如何被替换的吗pattern@velpandian:我已经更新了我的答案。请检查。Dinesh感谢您的快速回复,正如您所说,(.)将匹配任何一个字符,然后“应该在那里。我的问题是,如果您看到输入字符串的结尾以语言“”结尾,那么在这里,在这个特定区域e和“”中应该有2个匹配项“但我们在这一领域有1场比赛,你能澄清一下这一部分吗?”。。Thanks@velpandian:模式匹配后,它将向前移动到下一个字符,并尝试查找是否能够匹配剩余的可用文本。。因此,最后一句话,在e”
之后,我们只剩下一个不符合我们标准的双引号。嗨,多纳尔,你能解释一下这种替换是如何工作的吗?请告诉我任何regsub文档,我对regexp有基本的了解