2010-05-30 3 views
2

Есть ли сингулярное регулярное выражение, которое можно использовать, например, в диалоговом окне поиска/замены текстового редактора, чтобы отменить порядок элементов в списке?RegEx для изменения порядка списка?

Например, возьмите этот список:

  • Первый элемент
  • Второй пункт
  • Третий пункт

Выберите его в текстовом редакторе, например EditPad, довести до поиска и замены , используйте регулярное выражение (запустите как петлю или нет) и превратите его в:

  • Третий пункт
  • Второй элемент
  • Первый элемент

Можно ли это сделать?

+1

Я был бы удивлен, если это может быть сделано в одном выражении; в любом случае это не похоже на работу для RegEx. – Jay

ответ

4

Это не может быть сделано с помощью регулярного выражения.

Я бы рекомендовал использовать такой язык, как Perl, где вы можете использовать регулярное выражение для разделения списка и записи его обратно в обратном порядке.

0

технически не регулярные выражения, но есть sed один вкладыш, который меняет строки ввода (source):

sed '1!G;h;$!d' 

и vi команда реверс строки текущего файла (source):

:g/.*/m0 
1

только если список имеет фиксированное, известное число n пунктов, и даже тогда регулярное выражение становится все более сложным, как n растет. (Основная трудность, как правило, заключается в том, чтобы получить буквальную новую строку в движке.)

С помощью языка сценариев можно легко создавать эту серию все более сложных регулярных выражений; однако, как только вы используете язык сценариев, почти наверняка проще использовать его для самовосстановления!

2

В MSDOS

SORT /R <originallist.txt> resortedlist.txt 
+1

Это не отменяет порядок ввода, это сортирует вход в обратном порядке. Не то же самое. – Dan

0

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

В зависимости от того, как вы отформатировали свой список внутри текстового редактора вы могли бы сделать что-то вдоль этих линий:

Первоначальный текст: «Быстрый Браун Фокс»

Поиск: (\ W +) \ з (\ W +) \ s (\ W +) \ s (\ W +)

Заменить: $ 4 $ 3 $ 2 $ 1

Выход: "Фокс Браун поспешностью" (работает на Notepad ++, просто убедитесь, что вы выбираете вариант для «регулярного выражения»)

эквивалентно JavaScript:

 var string = "The Quick Brown Fox"; 
     string.replace(/(\w+)\s(\w+)\s(\w+)\s(\w+)/,"$4 $3 $2 $1"); 

хорошая ссылка является https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

Смежные вопросы