[英]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)
匹配一个非空白字符后跟一个空白边界)
关闭前瞻例子
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))
简单检查每个单词的长度是否大于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.