tokenize строку, содержащую разделители в Python

Есть ли эквивалент str.split в Python, который также возвращает разделители?

Мне нужно сохранить пробельный макет для моего вывода после обработки некоторых токенов.

Пример:

 >>> s="\tthis is an example" >>> print s.split() ['this', 'is', 'an', 'example'] >>> print what_I_want(s) ['\t', 'this', ' ', 'is', ' ', 'an', ' ', 'example'] 

Благодаря!

  • ошибка плохой zip-файла в пометке POS в NLTK в python
  • Питонический способ реализации токенизатора
  • Токизация арабских слов с использованием NLTK
  • Tokenizing unicode с помощью nltk
  • NLTK regexp tokenizer не играет хорошо с десятичной точкой в ​​регулярном выражении
  • получить индексы исходного текста из nltk word_tokenize
  • Как использовать CountVectorizerand () для скриншотов sklearn для получения ngrams, которые включают в себя любые знаки препинания в виде отдельных токенов?
  • Заполнение нескольких символов пробелом - python
  • 5 Solutions collect form web for “tokenize строку, содержащую разделители в Python”

    Как насчет

     import re splitter = re.compile(r'(\s+|\S+)') splitter.findall(s) 
     >>> re.compile(r'(\s+)').split("\tthis is an example") ['', '\t', 'this', ' ', 'is', ' ', 'an', ' ', 'example'] 

    модуль re обеспечивает такую ​​функциональность:

     >>> import re >>> re.split('(\W+)', 'Words, words, words.') ['Words', ', ', 'words', ', ', 'words', '.', ''] 

    (цитируется в документации Python).

    Для вашего примера (разделить на пробелы) используйте re.split('(\s+)', '\tThis is an example') .

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

    Изменить: Как указано, любые предыдущие / конечные разделители, конечно, также будут добавлены в список. Чтобы избежать этого, вы можете сначала использовать метод .strip() в своей строке ввода.

    Вы смотрели на пипаринг? Пример, заимствованный из вики-файла pyparsing :

     >>> from pyparsing import Word, alphas >>> greet = Word(alphas) + "," + Word(alphas) + "!" >>> hello1 = 'Hello, World!' >>> hello2 = 'Greetings, Earthlings!' >>> for hello in hello1, hello2: ... print (u'%s \u2192 %r' % (hello, greet.parseString(hello))).encode('utf-8') ... Hello, World! → (['Hello', ',', 'World', '!'], {}) Greetings, Earthlings! → (['Greetings', ',', 'Earthlings', '!'], {}) 

    Спасибо, ребята, указав на модуль re , я все еще пытаюсь решить между этим и использовать свою собственную функцию, которая возвращает последовательность …

     def split_keep_delimiters(s, delims="\t\n\r "): delim_group = s[0] in delims start = 0 for index, char in enumerate(s): if delim_group != (char in delims): delim_group ^= True yield s[start:index] start = index yield s[start:index+1] 

    Если бы у меня было время, я бы сравнил их с xD

    Interesting Posts
    Python - лучший язык программирования в мире.