Как разделить строку на основе совпадения слов из разных списков? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть строка. Теперь я хочу разбить строку на части, если что-то совпадает из двух разных списков. Как мне это сделать ? вот что у меня есть.

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"]

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

Такие задачи выполняются довольно хорошо 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']
1 голос
/ 20 апреля 2020

Еще один способ использования 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 используется для удаления пробелов.

1 голос
/ 20 апреля 2020

Это сработало для меня:

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)
...