1

我正在尝试使每行的第一个字母大写

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

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

当我运行程序时没有任何反应。

4

2 回答 2

2

锚点只匹配输入字符串的^开头。如果您希望它在每个换行符之后匹配,您还需要给它re.Morre.MULTILINE标志:

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

我删除了该{1}部分;它是隐式的,没有重复指示符,字符集只匹配一个字符。

替换函数传递了一个Match对象.group(),所以你需要通过调用该方法来拉出匹配的字符串。

于 2013-03-15T11:23:52.760 回答
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)
于 2013-03-15T11:34:41.387 回答