返回特定字符后的字符串

时间:2018-06-01 16:10:35

标签: tcl

我有一个关于在TCL中获取特定字符后字符串的可能性的问题。

我的意思是:

输入:

abcdefgh = hgfedcba

输出:

hgfedcba

(返回“=”之后的所有内容,没有可能的空格)

这就是我使用的:

regexp {abcdefgh=\s+"(.*)"} $text_var all variable

在某些情况下,它是可以的(带空格),但是当没有空格时,它就不起作用了。

2 个答案:

答案 0 :(得分:1)

假设

% set s {abcdefgh = hgfedcba}
# => abcdefgh = hgfedcba

(或者没有一个或两个空白的同一个东西)你可以做其中一个:

% scan $s {%*[^=]= %s}
# => hgfedcba

(扫描字符串以查找不包含“=”的子字符串,然后超过等号和可选空格,然后返回字符串的其余部分。)

string trim [lindex [split $s =] 1]

(将字符串拆分为等号,返回(空白修剪的)第二个结果元素。)

string trim [string range $s [string first = $s]+1 end]

(返回等号后面的(空格修剪的)子字符串。)

string trim [lindex [regexp -inline {[^=]+$} $s] 0]

(返回(空白修剪的)第一个匹配的一个或多个字符,不包括等号,锚定在字符串的末尾。)

lindex [regexp -inline -all {[a-h]+} $s] 1

(将连续字符的第二个匹配从“a”设置返回到“h”。)

string trimleft [string trimleft $s {abcdefgh }] {= }

(从集合“a”中出现的字符串开头的所有字符移除到“h”并留空,然后从结果字符串的开头删除任何等号或空格的字符。)

答案 1 :(得分:0)

% regexp {abcdefgh\s*=\s*(\S+)} "abcdefgh = hgfedcba" all variable
1
% set variable
hgfedcba
% regexp {abcdefgh\s*=\s*(\S+)} "abcdefgh=hgfedcba" all variable
1
% set variable
hgfedcba
%