Заменить начальные пробелы и прекратить сопоставление перед определенным символом - PullRequest
0 голосов
/ 17 февраля 2012

Не могу понять, как построить шаблон замены для следующего.

У меня есть массив строк, как показано ниже:

<span> code <span> code <span/> code </span>
    <span> code <span> code <span/> code </span>
    <span> code <span> code <span/> code </span>
        <span> code <span> code <span/> code </span>

В начале каждой строки есть пробел. Это может быть один пробел или два пробела или N пробелов. Также в самой строке может быть пробел.

Требуется заменить пробелы только в начале строки перед первым < символом. Каждый пробел должен быть заменен на &nbsp;

Так, если есть 1 пробел - его следует заменить на &nbsp;, если 2 пробела - должен быть &nbsp;&nbsp; В основном, N пробелов следует заменить на N &nbsp;

Я могу сделать это с помощью кода, но это не оптимально. Я пытался сделать это исключительно с помощью регулярных выражений, но не могу понять, как построить правильный шаблон.

Примеры такой замены на любом языке (Ruby, C #, Python, Perl) приветствуются.

P.S. Я обрабатываю построчно, поэтому достаточно создать шаблон замены, который будет работать в пределах одной строки.

P.P.S. Я был достаточно близко с наблюдателями, но все еще не могу понять, как остановить замену пробелов после первого <.

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

подход в Ruby

line.sub(/^( +)(?=<)/){'&nbsp;' * $1.length}

http://ideone.com/gVfPy

1 голос
/ 17 февраля 2012

В c # это не проблема

String s = "    <span> code <span> code <span/> code </span>";
Console.WriteLine(Regex.Replace(s, @"(?<=^\s*)\s", "&nbsp;"));

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

Но все остальные языки не поддерживают просмотр переменной длины.

0 голосов
/ 17 февраля 2012

двойной gsub в ruby:

str =  "    <span> code <span> code <span/> code </span>"
p str.gsub(/^ +/){|m| m.gsub(' ', '&nbsp;')}
#=> "&nbsp;&nbsp;&nbsp;&nbsp;<span> code <span> code <span/> code </span>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...