Разделение строк в Python с использованием определенных символов - PullRequest
2 голосов
/ 20 ноября 2011

Я пытаюсь разделить введенный документ по определенным символам. Мне нужно разделить их на [и], но мне трудно это понять.

def main():
for x in docread:
    words = x.split('[]')
    for word in words:
        doclist.append(word)

это часть кода, которая разделяет их в моем списке. Однако он возвращает каждую строку документа.

Например, я хочу конвертировать

['I need to [go out] to lunch', 'and eat [some food].']

до

['I need to', 'go out', 'to lunch and eat', 'some food', '.']

Спасибо!

Ответы [ 3 ]

6 голосов
/ 20 ноября 2011

Вместо этого можно попробовать re.split():

>>> import re
>>> re.split(r"[\[\]]", "I need to [go out] to lunch")
['I need to ', 'go out', ' to lunch']

Странное регулярное выражение [\[\]] - это класс символов, который означает разделение на либо [, либо ].Внутренние \[ и \] должны быть экранированы обратной косой чертой, потому что они используют те же символы, что и [ и ], для окружения класса символов.

2 голосов
/ 20 ноября 2011

str.split() разделяется на точную строку, которую вы передаете ей , а не на любой из ее символов. Передача "[]" будет разбиваться при появлении [], но не в отдельных скобках. Возможные решения

  1. разделение дважды:

    words = [z for y in x.split("[") for z in y.split("]")]
    
  2. с использованием re.split().

0 голосов
/ 20 ноября 2011

string.split (s), который вы используете, обрабатывает все содержимое 's' как разделитель. Другими словами, ваш вклад должен был выглядеть так: «[]« Мне нужно [] выйти [] на обед »,« и съесть [] немного еды []. '[] », Чтобы он дал вам результаты, которые вы хотят.

Вам необходимо использовать split (s) из re модуля , который будет рассматривать s как регулярное выражение

import re

def main():
for x in docread:
    words = re.split('[]', x)
    for word in words:
        doclist.append(word)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...