Разделить строку с символом вставки в Python - PullRequest
0 голосов
/ 18 июня 2011

У меня огромный текстовый файл, каждая строка выглядит так:

Какое-то общее меню ^ a_sub_menu_title ^^ pagNumber

Обратите внимание, что первый "общий"В меню "есть пробелы, вторая часть (подзаголовок) каждого слова отделена символом" _ "и, наконец, числом (номер страницы).Я хочу разбить каждую строку на 3 (очевидные) части, потому что я хочу создать какой-то каталог в python.

Я пытался с модулем re, но так как символ вставки имеет сильное значение в таком модулеЯ не мог понять, как это сделать.

Может кто-нибудь, пожалуйста, помогите мне ????

Ответы [ 5 ]

4 голосов
/ 18 июня 2011
>>> "Some sort of general menu^a_sub_menu_title^^pagNumber".split("^")
['Some sort of general menu', 'a_sub_menu_title', '', 'pagNumber']
2 голосов
/ 18 июня 2011

Если вам нужны только три части, вы можете сделать это с помощью выражения генератора:

line = 'Some sort of general menu^a_sub_menu_title^^pagNumber'
pieces = [x for x in line.split('^') if x]
# pieces => ['Some sort of general menu', 'a_sub_menu_title', 'pagNumber']
0 голосов
/ 18 июня 2011

Также возможно, что ваш файл использует формат, совместимый с модулем csv, вы также можете посмотреть на это, особенно если формат позволяет заключать в кавычки, потому что тогда line.split сломается.Если формат не использует кавычки и это просто разделители и текст, line.split, вероятно, является лучшим.

Кроме того, для модуля re любые специальные символы могут быть экранированы с помощью \, напримерr'\^'.Прежде чем перейти к использованию re к 1, я бы посоветовал: 1) научиться писать регулярные выражения, 2) сначала искать решение своей проблемы, а не переходить к регулярным выражениям - «Некоторые люди, сталкиваясь с проблемой, думают»Я знаю, я буду использовать регулярные выражения. "Теперь у них две проблемы.»

0 голосов
/ 18 июня 2011

Вы можете просто сказать string.split("^"), чтобы разделить строку на массив, содержащий каждый сегмент. Единственное предостережение заключается в том, что он разделит последовательные символы каретки на пустую строку. Вы можете защититься от этого, свернув последовательные караты в один или обнаружив пустые строки в результирующем массиве.

Для получения дополнительной информации см. http://docs.python.org/library/stdtypes.html

Это помогает?

0 голосов
/ 18 июня 2011

Что вам нужно сделать, это "экранировать" специальные символы, такие как r'\^'. Но лучше, чем регулярные выражения в этом случае будет:

line = "Some sort of general menu^a_sub_menu_title^^pagNumber"
(menu, title, dummy, page) = line.split('^')

Это дает вам компоненты гораздо более простым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...