使用正则表达式大写每行首字母

1 投票
2 回答
839 浏览
提问于 2025-04-17 19:11

我想把每一行的第一个字母变成大写。

我正在使用以下的正则表达式:

ModCon = re.sub('^[a-z]{1}', lambda x: x.upper(), ModCon)

但是当我运行程序时,什么都没有发生。

2 个回答

1

在这个 lambda 函数里,变量 x 不是字符串类型,而是一个叫做 <type '_sre.SRE_Match'> 的东西。要获取匹配到的字符串,你需要用 call x.group() 这个方法。

所以,结合其他回答里的提示,下面这个脚本可以正常工作:

import re
ModCon= "what is your favorite color?\nred"
ModCon = re.sub('^[a-z]', lambda x: x.group().upper(), ModCon, flags=re.M)
print (ModCon)
2

这个 ^ 符号只会匹配你输入字符串的最开始部分。如果你想让它在每一行的开头都能匹配,就需要加上 re.M 或者 re.MULTILINE 这个标志。

ModCon = re.sub('^[a-z]', lambda x: x.group().upper(), ModCon, flags=re.M)

我把 {1} 这一部分去掉了;因为它是隐含的,没有重复的指示符,字符集只会匹配 一个 字符。

替换函数会接收到一个 Match 对象,所以你需要通过调用 .group() 方法来提取匹配到的字符串。

撰写回答