Удаление символа табуляции - Perl - PullRequest
2 голосов
/ 08 сентября 2011

Я использую следующее выражение perl для удаления вкладок из здесь

$text =~ s{(.*?)\t}{$1.(' ' x ($g_tab_width - length($1) % $g_tab_width))}ge;

Я упростил мое понимание и перевод до следующего (предполагая ширину табуляции в четыре пробела)

$text =~  s/(.*?)\t/'    '/;

но я чувствую, что нарушил инструкцию Эйнштейна

Сделайте вещи максимально простыми, но не проще.

Я тестирую со следующими входными строками.

"\t \t"
"\t\t \t"
"\t\t \t\t \t"
"\t\t \t\t     \t"

Может ли кто-нибудь продемонстрировать входную строку, которая будет давать противоречивые результаты между этими двумя? (в проблемном пространстве удаления вкладок)

1 Ответ

2 голосов
/ 08 сентября 2011

Я предполагаю, что ваше второе упрощенное выражение должно быть:

$text =~ s/(.*?)\t/$1    /g;
# four spaces -------^^^^

и что $g_tab_width равно четырем; ничто иное здесь не имеет смысла для меня, поэтому я буду жить опасно и предположить, что вещи должны иметь смысл.

Учитывая, что почти все с вкладками будет давать разные результаты. Например:

"where\tis pancakes house?"

Дает эти результаты:

"Where   is pancakes house?"   # Long method.
"Where    is pancakes house?"  # Simplified method.

Живая версия: http://ideone.com/LbnNx

Единственный раз, когда они оба дадут один и тот же результат, это когда все компоненты без табуляции имеют длину 4 * n символов, например:

"xxxx\tyyyy\tzzzz"

Живая версия: http://ideone.com/Kvp3l

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