подстрока с небольшим изменением

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь решить эту проблему, если бы они дали мне набор строк, в которых можно подсчитать, сколько раз определенное слово появляется в строке типа ‘code’, но программа также учитывает любой вариант, где ‘d’ изменяется как ‘coze’, но что-то вроде ‘coz’ не учитывается, это то, что я сделал:

  def count(word):
  count=0
  for i in range(len(word)):
    lo=word[i:i 4]
    if lo=='co': # this is what gives me trouble
      count =1
  return count
  

Комментарии:

1. Я не понимаю вопроса. Похоже, вам просто нужно сопоставить регулярное выражение co.e

2. похоже, вам может понадобиться нечеткое сопоставление

3. Одна буква может отличаться в любой позиции или только в третьей позиции? cede Нормально? Это проблема домашнего задания / школы? Что не так с вашим решением?

Ответ №1:

Проверьте, совпадают ли первые два символа co и 4-й символ e .

 def count(word):
  count=0
  for i in range(len(word)-3):
    if word[i:i 1] == 'co' and word[i 3] == 'e'
      count =1
  return count
  

Цикл выполняется только до, len(word)-3 чтобы word[i 3] не выходить за пределы диапазона.

Ответ №2:

Для этого вы могли бы использовать регулярное выражение через re модуль.

 import re
string = 'this is a string containing the words code, coze, and coz'
re.findall(r'co.e', string)
['code', 'coze']
  

оттуда вы могли бы написать функцию, такую как:

 def count(string, word):
    return len(re.findall(word, string))
  

Ответ №3:

Регулярное выражение — это ответ на ваш вопрос, как упоминалось выше, но вам нужен более усовершенствованный шаблон регулярных выражений. поскольку вы ищете, появляется определенное слово, вам нужно выполнить поиск граничных слов. Итак, ваш шаблон должен быть sth. вот так:

 pattern = r'bco.eb'
  

таким образом, ваш поиск не будет совпадать со словами типа testcodetest или cozetest , а будет совпадать только с code coze coke , но не с начальными или следующими символами

если вы собираетесь тестировать несколько раз, то лучше использовать скомпилированный шаблон, так будет эффективнее использовать память.

 In [1]: import re

In [2]: string = 'this is a string containing the codeorg testcozetest words code, coze, and coz'

In [3]: pattern = re.compile(r'bco.eb')

In [4]: pattern.findall(string)
Out[4]: ['code', 'coze']
  

Надеюсь, это поможет.