Моя первая мысль заключается в том, что в вашем примере выборочные данные ужасно искажены. Было бы здорово увидеть его встроенным в некоторые теги ...
, чтобы столбцы были сохранены.
Если вы имеете дело со столбчатыми данными, вы можете перейти к ним с помощью substr () или unpack () проще, чем с помощью регулярных выражений. Вы можете использовать регулярные выражения для анализа данных, но большинство из нас, кто программировал на Perl, также узнали, что регулярные выражения не первый инструмент, который можно использовать много раз. Вот почему вы получили другие комментарии. Регекс - мощное оружие, но в него также легко выстрелить себе в ногу.
http://perldoc.perl.org/functions/substr.html
http://perldoc.perl.org/functions/unpack.html
Обновление:
После небольшой суеты на сайте SEC edgar я обнаружил, что файлы 13F красиво отформатированы. И у вас не должно возникнуть проблем с выяснением того, как их обрабатывать с использованием substr и / или распаковки.
FORM 13F INFORMATION TABLE
VALUE SHARES/ SH/ PUT/ INVSTMT OTHER VOTING AUTHORITY
NAME OF ISSUER TITLE OF CLASS CUSIP (x$1000) PRN AMT PRN CALL DSCRETN MANAGERS SOLE SHARED NONE
- ------------------------------ ---------------- --------- -------- -------- --- ---- ------- ------------ -------- -------- --------
3M CO COM 88579Y101 478 6051 SH SOLE 6051 0 0
ABBOTT LABS COM 002824100 402 8596 SH SOLE 8596 0 0
AFLAC INC COM 001055102 291 6815 SH SOLE 6815 0 0
ALCATEL-LUCENT SPONSORED ADR 013904305 172 67524 SH SOLE 67524 0 0
Если вы видите, что файлы 13F не отформатированы, как в вашем примере, то вы просматриваете неправильно, потому что в некоторых файлах между столбцами есть вкладки.
Я просмотрел 68 файлов, чтобы получить представление о том, что там происходит, затем написал быструю распакованную процедуру и получил следующее:
3M CO, COM, 88579Y101, 478, 6051, SH, , SOLE, , 6051, 0, 0
ABBOTT LABS, COM, 002824100, 402, 8596, SH, , SOLE, , 8596, 0, 0
AFLAC INC, COM, 001055102, 291, 6815, SH, , SOLE, , 6815, 0, 0
ALCATEL-LUCENT, SPONSORED ADR, 013904305, 172, 67524, SH, , SOLE, , 67524, 0, 0
Основываясь на некоторых других файлах, вот некоторые мысли о том, как их обрабатывать:
Некоторые файлы используют вкладки для разделения столбцов. Они тривиальны для анализа, и вам не нужно регулярное выражение для разделения столбцов. 0001031972-10-000004.txt выглядит именно так и выглядит очень похоже на ваш пример.
Некоторые файлы используют вкладки для выравнивания столбцов, не разделяют их. Вам необходимо выяснить, как сжать несколько вкладок в одну вкладку, а затем, вероятно, разделить вкладки, чтобы получить столбцы.
Другие используют пустую строку для разделения строк по вертикали, поэтому вам нужно будет пропустить пустые строки.
Другие позволяют переносить столбцы на следующую строку (как электронная таблица в столбце, который недостаточно широк. Не сложно понять, как с этим справиться, но как это сделать, оставляют в качестве упражнения для вы.
Некоторые используют выравнивание по центру столбцов, что приводит к появлению начальных и конечных пробелов в ваших данных. s/^\s+//;
и s/\s+$//;
станут вашими друзьями.
Самое интересное, что я видел, оказалось, что оно было создано правильно, затем завернуто в строку в столбце 78, что заставило меня подумать, что какой-то придурок загрузил свою электронную таблицу или отчет в свой текстовый процессор и затем сохранил ее. Чтение - это двухэтапный процесс избавления от переноса возврата каретки, а затем повторная обработка данных для анализа столбцов. В качестве дополнительной задачи у них также есть заголовки столбцов в данных для разрывов страниц.
Вы сможете получить 100% анализируемых файлов, однако, возможно, вы захотите сделать это с помощью нескольких различных методов анализа из-за использования вкладок и пустых строк и встроенных заголовков столбцов.
Ах, удовольствие от обработки данных из пустыни.