Возвращать строку после определенного символа - PullRequest
0 голосов
/ 01 июня 2018

У меня есть вопрос относительно возможности получения строки после определенного символа в TCL.

Что я имею в виду:

Ввод:

abcdefgh = hgfedcba

Вывод:

hgfedcba

(вернуть все после "=" без возможных пробелов)

Это то, что я использовал:

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

В некоторых случаях это нормально (с пробелами), но когда нет пробелов, то это не работает.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Предполагая

% 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» и пусто, затем удалите из начала полученной строки любые символы, которые являются знаком равенства или пробелом.)

0 голосов
/ 02 июня 2018
% 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
%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...