маркируйте строку, сохраняющую разделители в Python

Разногласия являются хорошим w/Java, что кто-то уже реализовал виджет или утилиту, в которой Вы нуждаетесь. Часть преимуществ многочисленного сообщества OSS. Никакая потребность перестроить колесо, если Вы действительно не хотите сделать это сами. В этом случае это было бы хорошее упражнение изучения в CellRenderers и Редакторах.

Мой проект имел большой успех с JIDE. Компонент, который Вы хотите, Список Флажка, находится в Общем Слое JIDE (который является OSS и размещенный на java.net). Коммерческий материал хорош также, но Вам не нужен он.

http://www.jidesoft.com/products/oss.htm https://jide-oss.dev.java.net /

17
задан fortran 30 November 2009 в 15:02
поделиться

5 ответов

Как насчет

import re
splitter = re.compile(r'(\s+|\S+)')
splitter.findall(s)
19
ответ дан 30 November 2019 в 12:27
поделиться
>>> re.compile(r'(\s+)').split("\tthis is an  example")
['', '\t', 'this', ' ', 'is', ' ', 'an', '  ', 'example']
6
ответ дан 30 November 2019 в 12:27
поделиться

модуль re предоставляет следующие функции:

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

(цитата из документации Python).

В вашем примере (разделение на пробелы) используйте re.split ('(\ s +)', '\ tЭто пример') .

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

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

4
ответ дан 30 November 2019 в 12:27
поделиться

Вы смотрели на pyparsing? Пример, заимствованный из вики-страницы 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', '!'], {})
3
ответ дан 30 November 2019 в 12:27
поделиться

Спасибо, ребята, что указали на модуль 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

-1
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: