Разделить строку, используя список значений одновременно - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть строка и список:

src = 'ways to learn are read and execute.'
temp = ['ways to','are','and']

Я хотел разделить строку, используя значения списка temp, и получить:

['learn','read','execute']

atв то же время.

Я пробовал for цикл:

for x in temp:
    src.split(x)

Вот что он произвел:

['','to learn are read and execute.']
['ways to learn','read and execute.']
['ways to learn are read','execute.']

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

У кого-нибудь были решения?

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

просто будь проще

src = 'ways to learn are read and execute.'
temp = ['ways','to','are','and']
res=''
for w1 in src.split():
  if w1 not in temp:
    if w1 not in res.split():
      res=res+w1+" "
 print(res)
0 голосов
/ 03 декабря 2018

Это метод, который является чисто питоническим и не основывается на регулярных выражениях.Это более многословно и более сложно:

result = []
current = 0
for part in temp:
    too_long_result = src.split(part)[1]
    if current + 1 < len(temp): result.append(too_long_result.split(temp[current+1])[0].lstrip().rstrip())
    else: result.append(too_long_result.lstrip().rstrip())
    current += 1
print(result)

Вы не можете удалить команды .lstrip().rstrip(), если не хотите удалять конечные и начальные пробелы в записях списка.

0 голосов
/ 03 декабря 2018

Петлевое решение.Вы можете добавить такие условия, как полоса, если они вам нужны.

src = 'ways to learn are read and execute.'
temp = ['ways to','are','and']
copy_src = src
result = []
for x in temp:
    left, right = copy_src.split(x)
    if left:
        result.append(left) #or left.strip()
    copy_src = right
result.append(copy_src) #or copy_src.strip()
0 голосов
/ 03 декабря 2018

re.split - это стандартное решение для разделения на несколько разделителей:

import re

src = 'ways to learn are read and execute.'
temp = ['ways to','are','and']

pattern = "|".join(re.escape(item) for item in temp)
result = re.split(pattern, src)
print(result)

Результат:

['', ' learn ', ' read ', ' execute.']

Вы также можете отфильтровать пустые элементы и убрать пробелы + пунктуацию с помощьюпростое понимание списка:

result = [item.strip(" .") for item in result if item]
print(result)

Результат:

['learn', 'read', 'execute']
...