Python如何从字符串中删除重复的字母序列(不能按间距拆分)

2024-10-04 01:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这与删除重复字符或重复单词不同,如下所述

  • “蓝色谷之星蓝色谷”应等于“蓝色谷之星”
  • “西密歇根白浪”和“西密歇根白浪”应该相等
  • “Oregon OraclesOregon”应等于“Oregon Oracles”

这里棘手的部分是它复制的开始,不是用空格分隔的。 所以我不能只按“”拆分它们,删除重复的单词,然后加入

我可以互相核对每封信。阈值为<;4. 重复字母以符合重复的条件

寻找一个更好的方法,虽然我错过了


Tags: 方法lt字母阈值条件字符单词蓝色
3条回答
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搜索

根据您提供的信息,这可以通过拆分给定的大写字母而不是空格来实现:

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

哪些产出:

['Blue','Valley','Stars']

如果需要单个字符串,请添加' '.join()

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

哪些产出:

'Valley Stars Blue'

像这样的怎么样

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

相关问题 更多 >