首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -如何从字符串中删除重复的字母序列(不能按间距拆分)

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

Stack Overflow用户
提问于 2020-06-16 20:04:52
回答 3查看 168关注 0票数 0

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

Whitecaps'

  • 'Oregon
  • ‘蓝谷StarsBlue谷’应该等于‘蓝谷星’
  • ‘西密西根州’密歇根州西部密西根州‘应该等于’西密歇根大学‘应该等于’俄勒冈州神谕‘

’。

这里棘手的部分是它复制的地方的开始,而不是用一个空格分隔。所以我不能把它们分割成‘',删除重复的单词,然后加入。

我可以互相核对每封信。以<4个重复字母的阈值来限定为重复字母。

寻找一个更好的方法,但我错过了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-16 20:10:03

像这样的怎么样?

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2020-06-16 20:09:33

考虑到您提供的信息,可以通过分割给定的大写字母而不是空格来实现这一点:

代码语言:javascript
复制
import re
list(set([x.strip() for x in re.findall('[A-Z][^A-Z]*', 'Blue Valley StarsBlue Valley')]))

其中产出:

代码语言:javascript
复制
['Blue','Valley','Stars']

如果希望使用单个字符串,请添加' '.join()

代码语言:javascript
复制
' '.join(list(set([x.strip() for x in re.findall('[A-Z][^A-Z]*', 'Blue Valley StarsBlue Valley')])))

其中产出:

代码语言:javascript
复制
'Valley Stars Blue'
票数 1
EN

Stack Overflow用户

发布于 2020-06-16 20:40:02

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
Blue Valley Stars
West Michigan Whitecaps
Oregon Oracles

这假设顺序是重要的。它本质上是一种搜索。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62416702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档