将具有多个特殊字符的字符串拆分为列表而不在python中导入任何内容

时间:2018-04-03 19:06:12

标签: python split python-3.6

我需要制作一个程序,将句子中的第一个单词大写,我想确保可以使用所有用于结束句子的特殊字符。

我无法导入任何东西!这是一个类,我只想要一些例子来做到这一点。

我试图使用if查看列表以查看是否找到匹配的字符并执行正确的拆分操作...

这是我现在拥有的功能......我知道它一点也不好,因为它只返回原始字符串......

def getSplit(userString):
    userStringList = []
    if "? " in userString:
        userStringList=userString.split("? ")
    elif "! " in userStringList:
        userStringList = userString.split("! ")
    elif ". " in userStringList:
        userStringList = userString.split(". ")
    else:
        userStringList = userString
    return userStringList

我希望能够输入this is a test. this is a test? this is definitely a test!

之类的内容

并获取[this is a test.', 'this is a test?', 'this is definitely a test!']

并且这将把句子列表发送到另一个函数,以使每个句子的第一个字母大写。

这是一个旧的家庭作业,我只能使用一个特殊字符将字符串分成列表。 buti希望用户能够输入更多然后只是一种句子...

4 个答案:

答案 0 :(得分:0)

我会在每个空格处拆分字符串。然后扫描列表中包含特殊字符的单词。如果存在,则下一个单词大写。最后加入列表。当然,这假设单词之间的连续空格不超过两个。

def capitalise(text):
        words = text.split()

        new_words = [words[0].capitalize()]
        i = 1
        while i < len(words) - 1:
                new_words.append(words[i])
                if "." in words[i] or "!" in words[i] or "?" in words[i]:
                        i += 1
                        new_words.append(words[i].capitalize())
                i += 1

        return " ".join(new_words)

答案 1 :(得分:0)

这可能是肝脏。使用str.replace将空格替换为特殊字符,并使用str.split

<强>实施例

def getSplit(userString):
    return userString.replace("!", " ").replace("?", " ").replace(".", " ").split()

print(map(lambda x:x.capitalize, getSplit("sdfsdf! sdfsdfdf? sdfsfdsf.sdfsdfsd!fdfgdfg?dsfdsfgf")))

答案 2 :(得分:0)

通常,您可以使用re.split(),但由于您无法导入任何内容,因此最好的选择就是执行for循环。这是:

def getSplit(user_input):
    n = len(user_input)
    sentences =[]
    previdx = 0
    for i in range(n - 1):
        if(user_input[i:i+2] in ['. ', '! ', '? ']):
            sentences.append(user_input[previdx:i+2].capitalize())
            previdx = i + 2
    sentences.append(user_input[previdx:n].capitalize())
    return "".join(sentences)

答案 3 :(得分:0)

如果你可以使用python默认提供的re模块,你可以这样做:

import re
a = 'test this. and that, and maybe something else?even without space.   or with multiple.\nor line breaks.'
print(re.sub(r'[.!?]\s*\w', lambda x: x.group(0).upper(), a))

会导致:

test this. And that, and maybe something else?Even without space.   Or with multiple.\nOr line breaks.