Regex exp не соответствует тестовой строке - PullRequest
0 голосов
/ 15 мая 2018

У меня есть файл, который выглядит следующим образом:

    0 1.6e-10 4.47e-10 7.94e-10 0.082080 rad:12 zzz_yy_x2 name/123 A1=0
    0 1.6e-10 0 7.94e-10 0.0 taa:12 yy_x2 name/540

Однако регулярное выражение, похоже, не соответствует первым 7 столбцам

if {[regexp {\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)} $line -> i s l t a c l n]} {
        echo $i $s $l $t $a $c $l $n
    }

1 Ответ

0 голосов
/ 15 мая 2018

Как насчет этого?

lassign $line i s l t a c l n

Предполагая, что в вашей строке нет странной пунктуации (фигурные скобки и т. Д.), Большинство функций TCL, ожидающих аргумент списка, также будут принимать строку сэлементы разделяются пробелами и рассматриваются как список.Функция "lassign" берет каждый элемент в списке и присваивает его переменной.

Кроме того, я не знаю, хотели ли вы повторно использовать переменную "l".Я думаю, что и regexp, и lassign сохранят третий элемент в «l» и сразу же перезапишут его седьмым элементом в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...