在 tcl 中删除部分字符串(单词)

delete part of string (word) in tcl

在 Tcl 中我有一些变量(字符串) 来自一些输入文本文件。 他们太多了... 有些事情看起来像你将要面对的:

 A1 = LP89slc.AT271300.0
 A2 = LP89slc.AT28742.0
 A3 = LP89slc.AT2-71300.0
 A3 = LP89slc.AT2-0.260-0.085

它们都在字符串中间有相同的部分({...}+{.AT2}+{...}) ==> (.AT2) 我想删除 (.AT2) 之后的右边部分 例如:

A1 = LP89slc.AT271300.0 ==> LP89slc.AT2
A2 = LP89slc.AT2-71300.0 ==> LP89slc.AT2

我还想知道有没有一种方法可以删除字符串中特殊字符(如...At2...)旁边的最后一部分 例如:设置不可预知的变量后 {SomeCharecter.At2UndesirablePart} 将其更改为 {SomeCharecter.At2}

这个问题和第一个问题的区别在于,在第一种情况下,第一部分是有限的和可分配的。 但是在第二个问题中,{AT2}左右两边的部分是不可预测的。

trim trimright trimleft 命令不执行我的工作!

你用什么语言编程?

VB:我会做类似

的事情

YourString.replace(".AT2",chr(1)).split(chr(1)(0) & ".AT2"

Java 你可以使用 split 来 像

YourString.split("\.AT2")[0]+'.AT2'

实际上它适用于大多数编程语言。

最简单的方法是使用正则表达式替换:

regsub -all -line {^.*\y(\w+\.AT2).*$} $theString {} theString

这里的棘手位是 -line 选项(这使得它在应用于多行字符串时起作用)和正则表达式中的 \y(在开头或结尾匹配一个词——在这种情况下它是开始,因为 \w 必须匹配下一个)。