2013-05-23 3 views
3

У меня есть столбцы, как:изменение порядка столбцов с регулярным выражением

9 100 100 0 
      10 
      20 
      30 
     110 0 
      10 
      20 
      30 
     120 0 
      10 
      20 
      30 
    120 100 0 
      10 
      20 
      30 

Я хочу, чтобы изменить порядок столбцов, как:

\3\2\1\0 

Это, как я стараюсь, чтобы получить один столбец:

(\t?|\d+) 

Это имеет смысл для меня, но это не работает, кто-нибудь видит ошибку?

После этого предположим, что они повторяют:

(\t?|\d+)(\t?|\d+)(\t?|\d+)(\t?|\d+) 

Круги с:

\3\2\1\0 

Может кто-то помочь мне с закреплением его?

ответ

4

Попробуйте

^(\d*)\t(\d*\t)(\d*\t)(\d*)$ 

и заменить его:

\4\t\3\2\1 

(непроверенная, но он чувствует себя хорошо)

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

0

Ваш образец текста с столбцами не содержит вкладок. Так вот это решение, которое позволяет пространства и вкладок, которые будут использоваться для разделения столбцов:

^(\d*)([ \t]+)(\d*)([ \t]+)(\d*)([ \t]+)(\d+)$ 

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

^[ \t]*(?:(\d+)([ \t]+))?(?:(\d+)([ \t]+))?(?:(\d+)([ \t]+))?(\d+)$ 

В нем 7 групп захвата. Группы 1,3,5,7 - значения столбцов, а группы 2,4,6 - разделители столбцов.

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

\7\6\5\4\3\2\1 

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

\7\t\5\t\3\t\1 
Смежные вопросы