Regex для преобразования пробелов во вкладки, но оставить элементы слова в середине? - PullRequest
1 голос
/ 27 февраля 2020

У меня есть проблема, которую, по словам моего Google, можно решить с помощью Regex, но я совершенно незнаком, и я пытался следовать некоторым учебникам, но я полностью потерян. У меня есть пример набора данных:

59 65 21366 CLEMENTINES 4.89 2.00 9.78
59 61 22384 PORK BACK RIBS 6.50 2.40 15.59
59 65 30669 BANANAS 1.89 1.00 1.89
59 13 391314 KODIAK POWER CAKES 14.69 1.00 14.69
59 65 392373 BAJA CHOPPED SALAD KIT 2.99 1.00 2.99
59 39 429227 FILA MENS ANKLE SOCK 6PK 9.99 1.00 9.99
59 65 1056187 ASIAN CASHEW SALAD KIT 2.99 1.00 2.99
59 28 1159696 SHOPKINS GG/TWOZIES ASST 5.97 1.00 5.97
59 13 1221327 KODIAK POWER CAKES -3.00 -3.00 COUPON
59 14 1270070 KLEENEX ULTRA SOFT 12 PCK 16.49 1.00 16.49
59 21 5221111 10 DRAWER STORAGE CART 29.99 1.00 29.99
59 17 1019 HALF + HALF 1 L 1.99 1.00 1.99

Я хочу импортировать его в электронную таблицу. Визуально я вижу то, что хочу (3 числа c столбцов в начале, затем описание, которое может содержать или не содержать пробелы, затем обычно 3 числа c столбцов, но иногда 2 + слово (см. строку, которая оканчивается на «купон»).

Но из-за пробелов и отсутствия кавычек мои навыки Excel (которые также являются незначительными) не позволяют мне разумно импортировать это.

Я думал о том, чтобы сделать несколько процессов: снять 3 столбца слева и 3 столбца справа ... но в Excel я не вижу способа работать "справа".

Любая помощь приветствуется. Спасибо.

[править] Из комментариев я понимаю, что мое невежество привело к плохому вопросу.

Я не понял, что "Regex" было указано c to language, et c. Я пытаюсь импортировать CSV-файл в Excel, но я использовал Notepad ++ для выполнения операций регулярного выражения. Я не знаю, какой "аромат" использует, но ответ ниже очень помог.

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете сопоставить это с:

^(\S*) (\S*) (\S*) (.*) (\S*) (\S*) (\S*)$
  • ^ соответствует началу строки
  • \S* соответствует одному или нескольким непробельным символам
  • .* соответствует чему угодно, включая пробелы
  • круглые скобки фиксируют совпадения в группы захвата
  • $ соответствует концу строки.

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

В одну сторону с Perl однострочником:

perl -pe 's/^(\S*) (\S*) (\S*) (.*) (\S*) (\S*) (\S*)$/"\1","\2","\3","\4","\5","\6","\7"/' input.txt

Возврат:

"59","65","21366","CLEMENTINES","4.89","2.00","9.78"
...
"59","13","1221327","KODIAK POWER CAKES","-3.00","-3.00","COUPON"
... etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...