Как объединить строки, экранированные фигурными скобками в Tcl? - PullRequest
2 голосов
/ 14 сентября 2011

Я пишу регулярное выражение в сценарии Expect и хочу использовать ([0-9] +) \ r в качестве шаблона регулярного выражения. Для предотвращения замены [...] я использую изогнутые скобки:

expect -re {([0-9]+)\r} {...}

Но \ r в {...} не имеют специального значения в фигурных скобках (рассматривается как два символа). Я стараюсь

expect -re {([0-9]+)}\r {...}

Но это требует ошибки разбора. Я пытаюсь

expect -re [concat {([0-9]+)} "\r"] {...}

Но concat добавить пробел между аргументами.

PS . Я знаю другое решение с "..." кавычками, заключая в кавычки [:

expect -re "(\[0-9]+)\r" {...}

но хотелось бы услышать решение с {...} стиль цитирования ...

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Вы правы: \ r не имеет смысла внутри {}, для этого вам нужно использовать двойные кавычки, но нужно избегать квадратных скобок:

expect -re "(\[0-9\]+)\r" ...

Если вы хотите объединить:

set expression {([0-9]+)}
append expression "\r"
expect -r $expression
0 голосов
/ 14 сентября 2011

Нет другого способа, кроме как выполнить одно из следующих действий:
regexp [string map {([0-9]+):spaceholder:} ":spaceholder:" "\r"] ...
regexp [list (\[0-9\]+)\r] ...
Мои примеры с регулярным выражением, потому что я никогда не видел "" (строку), работающую в regexpКоманда как шаблон, только со списком.
Вы можете попробовать что-то вроде этого tho: set p {([0-9]+)}; append p \r и затем использовать $p или просто set p {([0-9]+)}; regexp $p\r ...
Ваша проблема с пробелом: [join "a b" ""]

...