从字符串中删除前缀子字符串

时间:2016-12-13 21:36:13

标签: tcl

我有一个字符串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.}} ]

问题在于它分别跨abc.分开而不是整体分开。

1 个答案:

答案 0 :(得分:2)

嗯,有几种方法,但主要方法是使用string replaceregsubstring mapsplit - 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] "."]