У меня есть веревочка. Теперь я хочу разбить строку на части, если что-то соответствует из двух разных списков. Как мне это сделать ? вот что у меня есть.
dummy_word = "I have a HTML file"
dummy_type = ["HTML","JSON","XML"]
dummy_file_type = ["file","document","paper"]
for e in dummy_type:
if e in dummy_word:
type_found = e
print("type ->" , e)
dum = dummy_word.split(e)
complete_dum = "".join(dum)
for c in dummy_file_type:
if c in complete_dum:
then = complete_dum.split("c")
print("file type ->",then)
В данном сценарии мой ожидаемый результат["I have a", "HTML","file"]
С такими задачами довольно хорошо справляются itertools.groupby()
. Здесь ключ будет переводиться в отдельные слова, если слова находятся в наборе слов, илиFalse
если это не так. Это позволяет всем неспециальным словам группироваться вместе, а каждое специальное слово становится отдельным элементом:
from itertools import groupby
dummy_word = "I have a HTML file"
dummy_type = ["HTML","JSON","XML"]
dummy_file_type = ["file","document","paper"]
words = set(dummy_type).union(dummy_file_type)
[" ".join(g) for k, g in
groupby(dummy_word.split(), key=lambda word: (word in words) and word)]
# ['I have a', 'HTML', 'file']
Еще один способ использованияre
:
>>> list(map(str.strip, re.sub("|".join(dummy_type + dummy_file_type), lambda x: "," + x.group(), dummy_word).split(',')))
['I have a', 'HTML', 'file']
>>>
Сначала сформируйте шаблон регулярного выражения, объединив все типы с помощьюjoin
. С использованиемre.sub
, строка заменяется там, где перед токенами ставится запятая, а затем мы разделяем строку с помощью разделителя запятой.map
используется для удаления пробелов.
Это сработало для меня:
dummy_word = "I have a HTML file"
dummy_type = ["HTML","JSON","XML"]
dummy_file_type = ["file","document","paper"]
temp = ""
dummy_list = []
for word in dummy_word.split():
if word in dummy_type or word in dummy_file_type:
if temp:
dummy_list.append(temp)
print(temp, "delete")
print(temp)
new_word = word + " "
dummy_list.append(new_word)
temp = ""
else:
temp += word + " "
print(temp)
print(dummy_list)
dummy_type
илиdummy_file_type
например'This HTML file is also an XML document'
, или вы уверены, что такого типа ввода никогда не будет? Grand Phuba["This" ,"HTML" ,"file" ,"is also an", "XML"," document]"
itsMe