在字符串中每个单词之间添加一个空格

3

我一直在尝试让这更具挑战性,但我找不到实现这个目标的方法。因此,我想知道是否有可能将没有空格的单词分开,例如betweenThemLikeThisJustInASingleString 以下是我的代码:

def translate_morse(string):
    morse_a = {
    'a':'.-','b':'-...','c':'-.-.','d':'-..','e':'.','f':'..-.','g':'--.','h':'....','i':'..','j':'.---','k':'-.-','l':'.-..',
    'm':'--','n':'-.','o':'---','p':'.--.','q':'--.-','r':'.-.','s':'...','t':'-','u':'..-','v':'...-','w':'.--','x':'-..-',
    'y':'-.--','z':'--..',1:'.----',2:'..---',3:'...--',4:'....-',5:'.....',6:'-....',7:'--...',8:'---..',9:'----.',0:'-----'}
    translated = ""
    for i in string.split(' '):
        for key, value in morse_a.iteritems():
            if i == value:
                translated += key
    print translated

print """

    ###################################
    #                                 #
    #   Morse Alphabet Translator     #
    #   Author: Blackwolf             #
    #   Date: 2016-29-05              #
    #                                 #
    ###################################
    #                                 #
    #             USAGE:              #
    #  After each morse letter you    #
    #  will need to seperate (space)  #
    #  each letter                    #
    ###################################

"""
finished = False
while finished != True:
    translate_morse(raw_input("Enter morse: "))
    ask_ifFinished = raw_input('Are you done? (Y/N): ').lower()
    if ask_ifFinished == 'y':
        finished = True

1
正确使用字典!交换键和值,然后进行普通字典查找,而不是循环。此外,如果要将这些数字附加到字符串上,它们需要是字符串形式。 - Alex Hall
2个回答

10

如果你想在每个大写字母前插入一个空格:

import re
string = 'betweenThemLikeThisJustInASingleString'
print(re.sub('([A-Z])', r' \1', string))

输出:

between Them Like This Just In A Single String

在没有标记单词边界的情况下,没有完美的解决方案可以拆分单词。计算机如何知道singlestring应该被拆成single string而不是sing lest ring(如果您不了解,lest是一个英语单词)?有一些启发式规则可以用来做出合理猜测,但它们很复杂且有限。您还可以列出所有可能的解决方案,但这也会在您的水平上变得困难。


1
如果所有字母都是小写的呢? - Feelsbadman
这就是我会做的。不过考虑到他的莫尔斯电码字母表,你可能需要用它们的小写变体替换大写字母。另外,初始空格也不太好看;-) - user2390182
1
你可以在使用任何语言的单词列表(http://www-01.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt)中检查成员资格,但它可能不完美且存在歧义。 - user2201041
1
@IdontReallywolf 如果是这样,你就有一个真正的问题:即使你有一个词典来查找单词,单词边界仍然会存在歧义! - user2390182
我认为我会在以后更加熟练的时候保留这个目标 :D - Feelsbadman

4

在stackoverflow上的第一篇文章 :)

我在研究如何解决另一个问题时,发现了这个并想和大家分享。

要求

  • 在字符串中每个大写字母前加上空格。
  • 下面是不使用're'的实现方法。
    def spacer(str):

    sentence = []                 # create empty list

    sentence.append(str[0])       # put first letter in list. First letter doesn't need a space.
    for char in str[1::]:         # begin iteration after first letter
        if char.islower():
            sentence.append(char) # if character is lower add to list
        elif char.isupper():
            sentence.append( " ") # if character is upper add a space to list
            sentence.append(char) # then add the upper case character to list  
    result = ''.join(sentence)    # use () join to convert the list to a string
    return result                 # return end result

运行它

string='betweenThemLikeThisJustInASingleString'
spacer(string)

输出

'将它们之间的内容以单个字符串的形式连接起来'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接