удаление повторяющейся последовательности отдельных слов в строке с использованием регулярных выражений в python [duplicate]

Другой общий случай, когда можно получить это исключение, включает в себя насмешливые классы во время модульного тестирования. Независимо от используемой насмешливой структуры, вы должны убедиться, что все соответствующие уровни иерархии классов должным образом высмеиваются. В частности, все свойства HttpContext, на которые ссылается тестируемый код, должны быть изделены.

См. « Исключение NullReferenceException при проверке пользовательского AuthorizationAttribute » для несколько подробного примера.

12
задан AP257 13 November 2010 в 08:32
поделиться

3 ответа

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

import string

def find_substring(needle, haystack):
    index = haystack.find(needle)
    if index == -1:
        return False
    if index != 0 and haystack[index-1] not in string.whitespace:
        return False
    L = index + len(needle)
    if L < len(haystack) and haystack[L] not in string.whitespace:
        return False
    return True

И вот некоторые демо-коды (codepad - отличная идея: благодаря Феликс Клинг, чтобы напомнить мне)

6
ответ дан aaronasterling 26 August 2018 в 06:53
поделиться

Один подход с использованием модуля re или регулярного выражения, который должен выполнить эту задачу:

import re

string1 = "pizza pony"
string2 = "who knows what a pizza pony is?"

search_result = re.search(r'\b' + string1 + '\W', string2)

print(search_result.group())
0
ответ дан Chris Larson 26 August 2018 в 06:53
поделиться

Вы можете использовать регулярные выражения и специальный символ границы слова \b (выделить мной):

Соответствует пустой строке, но только в начале или конец слова. Слово определяется как последовательность буквенно-цифровых символов или символов подчеркивания, поэтому конец слова обозначается пробелом или буквенным или несимвольным символом. Обратите внимание, что \b определяется как граница между \w и \W, поэтому точный набор символов, считающийся буквенно-цифровым, зависит от значений флагов UNICODE и LOCALE. Внутри диапазона символов \b представляет символ обратного пробела для совместимости с строковыми литералами Python.

def string_found(string1, string2):
   if re.search(r"\b" + re.escape(string1) + r"\b", string2):
      return True
   return False

Демо


Если границы слов являются только пробелами для вас, вы также можете уйти с пре-и добавлением пробелов к вашим строкам:

def string_found(string1, string2):
   string1 = " " + string1.strip() + " "
   string2 = " " + string2.strip() + " "
   if string2.find(string1):
      return True
   return False
22
ответ дан Felix Kling 26 August 2018 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: