gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:49:22 29 4
gpt4 key购买 nike

我有一个字符串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. 中的每一个,而不是分开作为一个整体。

最佳答案

嗯,有几种方法,但主要的方法是使用string replaceregsubstring mapsplit -lreplace-join.

我们可能应该小心一点,因为我们必须首先检查前缀是否真的是前缀。幸运的是,string equal 有一个-length 操作,可以让这变得简单:

if {[string equal -length [string length $prefix] $prefix $string]} {
# Do the replacement
}

就个人而言,我可能会使用 regsub 但后来我对使用 RE 引擎技巧很满意。

使用字符串替换

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

使用字符串映射

# 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] "."]

关于tcl - 从字符串中删除前缀子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130974/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com