繁体   English   中英

如何改变python中大写字母的单词的第i个字母?

[英]how to change ith letter of a word in capital letter in python?

我想用大写字母更改每个单词的倒数第二个字母。 但是当我的句子包含一个带有一个字母的单词时,程序会给出一个错误(IndexError:字符串索引超出范围)。 这是我的代码。 它适用于多个字母的单词。 例如,如果我写 str="Python is best programming language" 它会起作用,因为没有任何单词带有(一个)字母。

str ="I Like Studying Python Programming"
array1=str.split()

result =[]
for i in array1:
     result.append(i[:-2].lower()+i[-2].upper()+i[-1].lower())

print(" ".join(result))

你的问题很适合使用正则表达式,所以我建议在这里:

str = " I Like Studying Python Programming"
output = re.sub(r'(\w)(?=\w\b)', lambda m: m.group(1).upper(), str)
print(output)

这打印:

I LiKe StudyiNg PythOn ProgrammiNg

请注意,此方法不会针对任何单个字母单词,因为它们后面不会跟另一个单词字符。

使用正则表达式的另一种选择是使用否定字符 class [^\W_\d]来缩小仅大写字符的匹配范围,以匹配除数字或下划线之外的单词字符,然后匹配非空白字符

例如,这会将a)大写为A) ,但不会匹配3d中的 3

解释

[^\W_\d](?=\S(?!\S))
  • [^\W_\d]匹配除_以外的字符字符或数字
  • (?= Positive lookahead, 断言直接在右边的是
    • \S(?!\S)匹配一个非空白字符后跟一个空白边界
  • )关闭前瞻

查看正则表达式演示Python 演示

例子

import re

regex = r"[^\W_\d](?=\S(?!\S))"
s = ("I Like Studying Python Programming\n\n"
    "a) This is a test with 3d\n")

output = re.sub(regex, lambda m: m.group(0).upper(), s)
print(output)

Output

I LiKe StudyiNg PythOn ProgrammiNg

A) ThIs Is a teSt wiTh 3d

使用PyPi 正则表达式模块,您还可以使用\p{Ll}来匹配具有大写变体的小写字母。

\p{Ll}(?=\S(?!\S))

查看正则表达式演示Python 演示

简单检查每个单词的长度是否大于1,然后将倒数第二个字母转为大写,将append转为result变量,如果单词长度为1,则将append原样转为result变量。

这是代码:

str ="I Like Studying Python Programming"
array1=str.split()

result =[]
for i in array1:
    if len(i) > 1:
        result.append(i[:-2].lower()+i[-2].upper()+i[-1].lower())
    else:
        result.append(i)

print(" ".join(result))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM