我有一个字符串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.}} ]
Run Code Online (Sandbox Code Playgroud)
问题是它拆分为、和 中的每一个a,而不是作为一个整体分开。bc.
嗯,有几种方法,但主要的是使用string replace, regsub, string map, 或split- lreplace- join。
我们可能应该小心一点,因为我们必须首先检查前缀是否真的是前缀。幸运的是,string equal有一个-length操作可以轻松实现:
if {[string equal -length [string length $prefix] $prefix $string]} {
# Do the replacement
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我可能会使用,regsub但我很高兴使用 RE 引擎技巧。
string replaceset 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}]]
Run Code Online (Sandbox Code Playgroud)
regsub# ***= is magical and says "rest of RE is simple plain text, no escapes"
regsub ***=$prefix $string "" string
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
split…join这是关于你试图做的事情。它依赖于.作为一种分离的。
set string [join [lrange [split $string "."] 1 end] "."]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4720 次 |
| 最近记录: |