我有一个字符串abc.def.ghi.j
,我希望从中删除abc.
,以便我有def.ghi.j
。
1)删除具有特定模式的前缀的最佳方法是什么?
2)因为在这种情况下,abc
巧合地是前缀,这可能会使事情变得更容易。如果我们想要abc.ghi.j
作为输出怎么办?
我尝试了split
这样的方法
set name abc.def.ghi.j
set splitVar [split $name {{abc.}} ]
问题在于它分别跨a
,b
,c
和.
分开而不是整体分开。
答案 0 :(得分:2)
嗯,有几种方法,但主要方法是使用string replace
,regsub
,string map
或split
- lreplace
- join
。
我们可能应该小心一点,因为我们必须首先检查前缀是否真的是前缀。幸运的是,string equal
有一个-length
操作,可以轻松实现:
if {[string equal -length [string length $prefix] $prefix $string]} {
# Do the replacement
}
就个人而言,我可能会使用regsub
,但我对使用RE引擎技巧感到满意。
string replace
set string [string replace $string 0 [string length $prefix]-1]
# Older versions require this instead:
# set string [string replace $string 0 [expr {[string length $prefix]-1}]]
regsub
# ***= is magical and says "rest of RE is simple plain text, no escapes"
regsub ***=$prefix $string "" string
string map
# Requires cunning to anchor to the front; \uffff is unlikely in any real string
set string [string map [list \uffff$prefix ""] \uffff$string]
split
... join
这是关于你想要做的事情。 取决于 .
是一种分隔符。
set string [join [lrange [split $string "."] 1 end] "."]