В “aa67bc54c9”, там какой-либо способ распечатать “aa” 67 раз, “до н.э” 54 раза и так далее, с помощью регулярных выражений?

Этот JS обычно работал хорошо на меня, если Вы также помещаете идентификатор на элемент:

document.getElementById('MyID').scrollIntoView(true);

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

5
задан Siddhant 9 November 2014 в 15:13
поделиться

5 ответов

как насчет:

while ($line =~ s/^([a-z]+)(\d+)//i)
{
    print $1 x $2;
}
20
ответ дан 18 December 2019 в 05:11
поделиться

Отвечая на ваш вопрос напрямую:

  • Нет, регулярные выражения соответствуют тексту и ничего не печатают, поэтому нет возможности сделать это только с использованием регулярных выражений.

Регулярное выражение вы указали совпадение одной пары строка / номер; затем вы можете печатать это повторно, используя соответствующий механизм. Решение Perl от @tster настолько компактно, насколько возможно. (Он не использует имена, которые вы применили в своем регулярном выражении; я почти уверен, что это не имеет значения.)

Остальные детали зависят от вашего языка реализации.

7
ответ дан 18 December 2019 в 05:11
поделиться

Nice answers so far. Regular expressions alone are generally thought of as a way to match patterns, not generate output in the manner you mentioned.

Having said that, there is a way to use regex as part of the solution. @Jonathan Leffler made a good point in his comment to tster's reply: "... maybe you need a better regex library in your language."

Depending on your language of choice and the library available, it is possible to pull this off. Using C# and .NET, for example, this could be achieved via the Regex.Replace method. However, the solution is not 100% regex since it still relies on other classes and methods (StringBuilder, String.Join, and Enumerable.Repeat) as shown below:

string input = "aa67bc54c9";
string pattern = @"([a-z]+)(\d+)";
string result = Regex.Replace(input, pattern, m =>
        // can be achieved using StringBuilder or String.Join/Enumerable.Repeat
        // don't use both
        //new StringBuilder().Insert(0, m.Groups[1].Value, Int32.Parse(m.Groups[2].Value)).ToString()
        String.Join("", Enumerable.Repeat(m.Groups[1].Value, Int32.Parse(m.Groups[2].Value)).ToArray())
         + Environment.NewLine // comment out to prevent line breaks
        );
Console.WriteLine(result);

A clearer solution would be to identify the matches, loop over them and insert them using the StringBuilder rather than rely on Regex.Replace. Other languages may have compact idioms to handle the string multiplication that doesn't rely on other library classes.

To answer the interview question, I would reply with, "it's possible, however the solution would not be a stand-alone 100% regex approach and would rely on other language features and/or libraries to handle the generation aspect of the question since the regex alone is helpful in matching patterns, not generating them."

And based on the other responses here you could beef up that answer further if needed.

2
ответ дан 18 December 2019 в 05:11
поделиться

Знаете ли вы, почему «регулярные выражения» называются «регулярными»? : -)

Это было бы слишком долго, чтобы объяснять, я просто обрисую путь. Чтобы сопоставить шаблон (то есть решить, является ли данная строка «действительной» или «недопустимой»), теоретик-информатик должен использовать конечный автомат . Это абстрактная машина с конечным числом состояний; каждый тик он считывает символ из ввода и переходит в другое состояние. Шаблон перехода из определенного состояния при чтении определенного символа фиксирован. Некоторые состояния отмечены как «OK», некоторые - как «FAIL», так что, исследуя состояние машины, вы можете проверить, является ли ваш текст «действительным» (т.е. действительным электронным письмом).

Например, эта машина принимает только "хорошее" как свое " Это не может быть выражено ничем, что работает как конечный автомат.

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

Однако современные регулярные выражения более выразительны и , как говорят, могут проверять сбалансированные скобки ! Но это может служить хорошим примером того, что вы не должны использовать регулярные выражения для задач, которые им не подходят. Не говоря уже о том, что он содержит фрагменты кода; это делает выражение далеко не «регулярным».

Отвечая на начальный вопрос, вы не можете решить вашу проблему, используя только что-то «обычное» . Однако регулярные выражения могут помочь вам в решении этой проблемы, как в ответе tster


Возможно, Мне нужно внимательнее присмотреться к ответу tster (поставьте «+1», пожалуйста!) И показать, почему это не решение «регулярного выражения». Можно подумать, что это так, он просто содержит оператор печати (не обязательно) и цикл, а концепция цикла совместима с выразительной силой конечного автомата. Но есть еще одна неуловимая вещь:

while ($line =~ s/^([a-z]+)(\d+)//i)
{
    print $1 
             x  # <--- this one
               $2;
}

Задача чтения строки и числа и многократной печати этой строки заданное количество раз, где число является произвольным целым числом , не может быть выполнено в конечном состоянии. машина без дополнительной памяти. Вы используете ячейку памяти, чтобы сохранить это число и уменьшить его, а также проверить, не больше ли оно нуля. Но это число может быть сколь угодно большим , и это противоречит конечной памяти, доступной для конечного конечного автомата.

Однако нет ничего плохого в классическом шаблоне / ([abc] *) {5} / , совпадающее с чем-то "обычным", повторяется фиксированное количество раз. По сути, у нас есть состояния, которые соответствуют «сопоставленному образцу один раз», «сопоставленному образцу дважды» ... «сопоставленному образцу 5 раз». Их конечное число, и в этом вся разница.

33
ответ дан 18 December 2019 в 05:11
поделиться

Не устанавливать DYLD_LIBRARY_PATH . Из-за этого env var, динамический компоновщик dyld, находит /opt/local/lib/libjpeg.dylib и т. Д. Вместо различных /System/Library/Frameworks//ApplicationServices.framework/ Версии / A / Frameworks / ImageIO.framework / Resources / libJPEG.dylib , которые ему нужны.

- независимо от того, как вы ответите, этот ответ неверен, если у вас нет точного ответа, которому интервьюер обучал попугая. См. Решение проблемы, данное Павлом Шведом - обратите внимание, что все вызовы имеют "не" как общее условие, инструмент просто продолжает скользить: Даже когда он меняет состояние, в этом состоянии нет счетчика

У меня есть довольно продвинутая книга Кеннета С. Лаудена, профессора колледжа по этому вопросу, в которой утверждается, что рассматриваемая проблема кодифицирована как «Regex's не умеет считать». На данный момент мне кажется очевидным ответом на этот вопрос с использованием функции опережающего просмотра регулярных выражений ...

Вероятно, это зависит от того, какую сборку какого бренда регулярного выражения использует интервьюер, что, вероятно, зависит от динамики полета Golf Шары.

как правило, инструмент просто продолжает скользить: Даже когда он меняет состояние, в этом состоянии нет счетчика

У меня есть довольно продвинутая книга Кеннета С. Лоудена, профессора колледжа по этому вопросу, в которой утверждается, что рассматриваемая проблема кодифицирована как «Regex's не может рассчитывать». На данный момент мне кажется очевидным ответом на этот вопрос с использованием функции опережающего просмотра регулярных выражений ...

Вероятно, это зависит от того, какую сборку какого бренда регулярного выражения использует интервьюер, что, вероятно, зависит от динамики полета Golf Шары.

как правило, инструмент просто продолжает скользить: Даже когда он меняет состояние, в этом состоянии нет счетчика

У меня есть довольно продвинутая книга Кеннета С. Лоудена, профессора колледжа по этому вопросу, в которой утверждается, что рассматриваемая проблема кодифицирована как «Regex's не может рассчитывать». На данный момент мне кажется очевидным ответом на этот вопрос с использованием функции опережающего просмотра регулярных выражений ...

Вероятно, это зависит от того, какую сборку какого бренда регулярного выражения использует интервьюер, что, вероятно, зависит от динамики полета Golf Шары.

в котором говорится, что рассматриваемая проблема кодифицирована как «Regex's не может рассчитывать». На данный момент мне кажется очевидным ответом на этот вопрос с использованием функции опережающего просмотра регулярных выражений ...

Вероятно, это зависит от того, какую сборку какого бренда регулярного выражения использует интервьюер, что, вероятно, зависит от динамики полета Golf Шары.

в котором говорится, что рассматриваемая проблема кодифицирована как «Regex's не может рассчитывать». На данный момент мне кажется очевидным ответом на этот вопрос с использованием функции опережающего просмотра регулярных выражений ...

Вероятно, это зависит от того, какую сборку какого бренда регулярного выражения использует интервьюер, что, вероятно, зависит от динамики полета Golf Шары.

4
ответ дан 18 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: