2013-03-08 4 views
2

Как получить шаблон, подобный этому, разбитый на 3 переменные с использованием регулярного выражения в ожидании?regexp в ожидании?

set var Gi1/0/23 

, пожалуйста, помогите и объясните?

регулярное_выражение шаблон $ вар аЬс

таким образом, что

a --> Gi1 
b --> 0 
c --->23 

ответ

2

Это регулярное выражение должно работать, чтобы захватить целевой вход в 3-х группах:

(\w+)/(\w+)/(\w+) 

FYI \w означает «слово char ", то есть [a-zA-Z0-9_], поэтому он должен работать для различных входных данных.

+0

Так как это для ожидать, я просто хотел бы расширить. Я использовал ответ @ Bohemian, чтобы заставить это работать: 'ожидать -re {^ Problem \ sstreams \ s = \ s ((\ d [\ s]?) + $)}', Который соответствует "0 1 2 3 4" в строке «Проблемные потоки = 0 1 2 3 4», например. Затем я мог бы присвоить это соответствие переменной как таковой: set mydigits expect_out (0, string) '. Внешние parens соответствуют всей цепочке цифр и пробелов между ними. Внутренние парны соответствуют каждой цифре, когда она встречается с ней, поэтому к концу она равна «4», используя мою строку в качестве примера. – harperville

1

Ниже регулярное выражение будет захватывать Fa*number* или Gi*number* в задней контрольной группе 1 и последний номер в задней контрольной группе 2

^((?:Fa|Gi)\d)/\d+/(\d+) 

Обновление:

на основе обновленной вопрос, что-то, как это будет захватить ваш общий шаблон:

^([A-Z][a-z]\d+)/(\d+)/(\d+) 
0

Обычно я придерживаюсь этого правила: если вы знаете, что хотите сохранить, используйте регулярное выражение; если вы знаете, что хотите выбросить, используйте split. Здесь вы знаете, что хотите использовать слэш как разделитель и получить оставшиеся значения, поэтому я бы использовал split.

split $var/

Чтобы присвоить полученные значения переменных, используйте одну из следующих форм:

lassign [split $var /] a b c    ;# for recent versions of expect 
foreach {a b c} [split $var /] {break} ;# for old versions 
Смежные вопросы