Python - Как удалить повторяющуюся последовательность букв из строки (не разбивается по пробелам) - PullRequest
0 голосов
/ 16 июня 2020

Это отличается от удаления повторяющихся символов или повторяющихся слов, как описано ниже.

  • «Звезды Голубой долины» должны равняться «Звезды Голубой долины». Michigan 'должно равняться' West Michigan Whitecaps '
  • ' Oregon OraclesOregon 'должно равняться' Oregon Oracles '

Сложная часть здесь - это начало дублирования, без разделения с пробелом. Так что я не могу просто разделить их на '', удалить повторяющиеся слова и присоединиться.

Я мог бы перепроверить каждую букву с другой буквой. С порогом <4 повторяющихся букв, чтобы считаться дубликатом. </p>

Ищу лучший способ, который я пропустил.

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Как насчет этого?

def mangle(s):
    for x in range(1, len(s)):
        suffix = s[-x:]
        if s.startswith(suffix):
            return (s[:-x], suffix)


for case in [
    "Blue Valley StarsBlue Valley",
    "West Michigan WhitecapsWest Michigan",
    "Oregon OraclesOregon",
    "Hello World",
    "123123",
]:
    print(case, "->", mangle(case))

Вывод:

Blue Valley StarsBlue Valley -> ('Blue Valley Stars', 'Blue Valley')
West Michigan WhitecapsWest Michigan -> ('West Michigan Whitecaps', 'West Michigan')
Oregon OraclesOregon -> ('Oregon Oracles', 'Oregon')
Hello World -> None
123123 -> ('123', '123')
1 голос
/ 16 июня 2020
import re

def dedup (inText):
    splitBySpace = inText.split()

    final = []
    for each in splitBySpace:
        if each not in final:
            checkFound = False
            for eachSavedToken in final:
                if eachSavedToken in each:
                    final.append(each.replace(eachSavedToken, ''))
                    checkFound = True
                    break            
            if not checkFound:
                final.append(each)


    return ' '.join(final)

for eachStr in ['Blue Valley StarsBlue Valley','West Michigan WhitecapsWest Michigan','Oregon OraclesOregon']:
    print (dedup (eachStr))

Вывод:

Blue Valley Stars
West Michigan Whitecaps
Oregon Oracles

Предполагается, что порядок важен. По сути, это поиск по substr.

1 голос
/ 16 июня 2020

Учитывая предоставленную вами информацию, это может быть достигнуто путем разделения заданного верхнего регистра вместо пробелов:

import re
list(set([x.strip() for x in re.findall('[A-Z][^A-Z]*', 'Blue Valley StarsBlue Valley')]))

Какие результаты: строка, добавьте ' '.join():

' '.join(list(set([x.strip() for x in re.findall('[A-Z][^A-Z]*', 'Blue Valley StarsBlue Valley')])))

Какие выходы:

'Valley Stars Blue'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...