python 在范围循环中使用for的大写字母[已关闭]

xuo3flqw  于 2023-01-24  发布在  Python
关注(0)|答案(2)|浏览(111)

14小时前关门了。
Improve this question
我正在尝试解决一个问题,即一个for in range循环遍历一个句子,并将.""、"!"和"?"后面的每个字母以及句子的第一个字母大写。例如,

welcome! how are you? all the best!

会变成

Welcome! How are you? All the best!

我试过使用len函数,但是我一直在纠结如何从标识值的位置到大写下一个字母。

2vuwiymt

2vuwiymt1#

我会用一个可调用的正则表达式替换来做这个。替换有两种情况。

  • 字符串以较低的开头:^[a-z]
  • 有一个.!?,后跟空格和更小的。[.!?]\s+[a-z]

在这两种情况下,您都可以将匹配的内容大写。下面是一个示例:

import re

capatalize_re = re.compile(r"(^[a-z])|([.!?]\s+[a-z])")

def upper_match(m):
    return m.group(0).upper()

def capitalize(text):
    return capatalize_re.sub(upper_match, text)

这导致:

>>> capitalize("welcome! how are you? all the best!")
Welcome! How are you? All the best!
pexxcrt2

pexxcrt22#

欢迎来到StackOverflow,为了不破坏解决方案,我将给予你两个提示:

>>> from itertools import tee
>>> def pairwise(iterable):
...     "s -> (s0,s1), (s1,s2), (s2, s3), ..."
...     a, b = tee(iterable)
...     next(b, None)
...     return zip(a, b)
... 
>>> list(pairwise([1,2,3,4,5,6]))
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
>>> list(enumerate("hello"))
[(0, 'h'), (1, 'e'), (2, 'l'), (3, 'l'), (4, 'o')]

这两个函数将极大地帮助您解决这个问题。

相关问题