Python中句子的大写

2024-10-06 12:08:44 发布

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

我在修改一个简单的代码,但我似乎记不下来。在

我希望用户在提示中以句子的形式输入字符串。例如:

hey. how are you? the c.i.a. is watching! lol. 

它返回:

^{pr2}$

所以它的要求是:

  1. 如果字符串的第一个字母是字母,则将其大写
  2. 每个句点、问号或感叹号后都要大写
  3. 如果字母后面有句点而前面没有字母,则将其大写

到目前为止我只有

def fix_capitalization():
s = raw_input("Enter string: ")
if s[0:1] == 'a' < [char] < 'z': 
    capitalize(s)

关于如何做到这一点的思考过程如下

大写:将第一个字母大写,然后遍历字符串,如果有句点、问号或感叹号,则下一个字母将大写。如果句点前有一个字母,句点前有两个字符,则将句点前的字母大写。在


Tags: the字符串代码用户you字母are形式
3条回答

它并不像看上去那么简单,但是假设您只需要在简单情况下工作的简单解决方案(否则,您将需要类似于NLTK的东西,这要复杂得多)。在

在最简单的情况下,你需要的是确定哪个字母大写,提取它们大写,然后注入它们。在

有几种方法可以做到这一点,但大多数方法都会使用字母的位置和标点符号作为识别因素。在

尝试使用循环、替换、正则表达式,并通过编辑问题来发布结果。在

下面的代码符合您的3条规则。但我认为你的规则还不够完善。“is”中的字符“i”与规则2匹配,但不应将其大写。在

import re

def uppercase(matchobj):
    return matchobj.group(0).upper()

def capitalize(s):
    return re.sub('^([a-z])|[\.|\?|\!]\s*([a-z])|\s+([a-z])(?=\.)', uppercase, s)

s = """hey. how are you? the c.i.a. is watching! lol. """
print capitalize(s)

输出:

^{pr2}$

这比张提摩西的回答有所改进,正确处理了更多的案件。请参阅内联注释。也就是说,处理所有的例外和奇怪的大写是一个相当复杂的语言问题。最好使用预先准备好的解决方案(有人建议使用Python自然语言工具包NLTK)或完全避免这个问题。在

import re

s1 = "hey. how are you? the c.i.a. is watching! lol."

print re.sub(r"(\A\w)|"+                  # start of string
             "(?<!\.\w)([\.?!] )\w|"+     # after a ?/!/. and a space, 
                                          # but not after an acronym
             "\w(?:\.\w)|"+               # start/middle of acronym
             "(?<=\w\.)\w",               # end of acronym
             lambda x: x.group().upper(), 
             s1)

Hey. How are you? The C.I.A. is watching! Lol.

相关问题 更多 >