Mam ten ciąg:

("abs, aaaa aaa")

Chcę to zwrócić:

("abs",",","aaaa","aaa")

Próbowałem tego:

([i for item in lst for i in item.split()])

Ale zwraca to:

("abs","aaaa","aaa")
0
Mongo 20 listopad 2019, 23:03
Ponieważ nie ma spacji ' ' przed , abs, jest uważane za pojedyncze słowo.
 – 
Poojan
20 listopad 2019, 23:05
Więc to znaczy, że nie można go dodać?
 – 
Mongo
20 listopad 2019, 23:07
Aby osiągnąć pożądany rezultat, musisz ręcznie obsługiwać ten rodzaj sprawy. Czy możesz podać jeszcze jeden przykład wyjścia wejściowego? "abs ,,, aaa". co z tego wyniknie?
 – 
Poojan
20 listopad 2019, 23:08
Podejście re Thierry'ego jest drogą do zrobienia. ale jeśli potrzebujesz surowego rozwiązania do kompilowania list: [word or ',' for comma_word in "abs, aaaa aaa".split() for word in comma_word.split(',')]
 – 
Brian Joseph
20 listopad 2019, 23:16
Wynik będzie taki ["abs", "," , "," , "," , "aaa"]
 – 
Mongo
21 listopad 2019, 00:30

3 odpowiedzi

Możesz to zrobić za pomocą wyrażenia regularnego:

import re

data = "abs, aaaa    aaa"

out = re.findall(r'\w+|\S', data)

print(out)
# ['abs', ',', 'aaaa', 'aaa']

Szukamy słów (\w+) lub dowolnego znaku innego niż spacja (\S)

4
Thierry Lathuille 20 listopad 2019, 23:13
Czy można dodać przecinek i spację?
 – 
Mongo
21 listopad 2019, 00:06

Moje rozwiązanie jest proste: zamień wszystkie przecinki na „,”, a następnie podziel:

lst = "abc, aaaa aaa"
lst.replace(",", " , ").split()  # ==> ['abs', ',', 'aaaa', 'aaa']
2
Hai Vu 20 listopad 2019, 23:17
from nltk.tokenize import TweetTokenizer

tokenizer = TweetTokenizer()
tokenizer.tokenize("abs, aaaa aaa")

#op
['abs', ',', 'aaaa', 'aaa']
0
qaiser 21 listopad 2019, 16:24