Разделить строки на слова с несколькими разделителями слов

Я сам сам столкнулся с этим вопросом, но ответил на это, создав временную таблицу и вставив в нее все значения, чтобы я мог тогда:

SELECT * FROM TABLE WHERE col IN (SELECT col FROM temporarytable);
606
задан Superdooperhero 9 February 2019 в 14:46
поделиться

6 ответов

Случай, когда регулярные выражения оправданы:

import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']
438
ответ дан 22 November 2019 в 21:53
поделиться

попробуйте следующее:

import re

phrase = "Hey, you - what are you doing here!?"
matches = re.findall('\w+', phrase)
print matches

это напечатает [ «Эй», «ты», «что», «есть», «ты», «делаешь», «здесь» ]

5
ответ дан 22 November 2019 в 21:53
поделиться

re.split ()

re.split (pattern, string [, maxsplit = 0])

Разделить строку по экземплярам шаблона. Если в шаблоне используются захватывающие круглые скобки, то текст всех групп в шаблоне также возвращается как часть результирующего списка. Если maxsplit отличен от нуля, происходит не более maxsplit разбиений, а остаток строки возвращается как последний элемент списка. (Примечание о несовместимости: в исходном выпуске Python 1.5 maxsplit игнорировался. Это было исправлено в более поздних выпусках.)

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
535
ответ дан 22 November 2019 в 21:53
поделиться

Другой способ добиться этого - использовать набор инструментов для естественного языка ( nltk ).

import nltk
data= "Hey, you - what are you doing here!?"
word_tokens = nltk.tokenize.regexp_tokenize(data, r'\w+')
print word_tokens

Это напечатает: ['Эй', 'ты' , 'что', 'есть', 'вы', 'делаю', 'здесь']

Самый большой недостаток этого метода заключается в том, что вам необходимо установить пакет nltk .

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

1
ответ дан 22 November 2019 в 21:53
поделиться

Другой способ, без регулярного выражения

import string
punc = string.punctuation
thestring = "Hey, you - what are you doing here!?"
s = list(thestring)
''.join([o for o in s if not o in punc]).split()
55
ответ дан 22 November 2019 в 21:53
поделиться

У меня была похожая дилемма и я не хотел использовать модуль 're'.

def my_split(s, seps):
    res = [s]
    for sep in seps:
        s, res = res, []
        for seq in s:
            res += seq.split(sep)
    return res

print my_split('1111  2222 3333;4444,5555;6666', [' ', ';', ','])
['1111', '', '2222', '3333', '4444', '5555', '6666']
24
ответ дан 22 November 2019 в 21:53
поделиться
Другие вопросы по тегам:

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