我会尽量用外行的话来解释这个解决方案。
所以首先,
re.sub()
搜索指定模式的出现
'[_-](.)'
它将匹配连字符所在的任何子字符串
'-'
或下划线
'_'
就在另一个角色之前。这个
回复:sub()
函数然后分别通过匿名函数(lambda函数)运行这些匹配。
python中的Regex分组本质上涉及那些大括号
()
收集子表达式以供以后在程序中使用。lambda函数将接收一些从搜索中生成的regex对象
text
对于提供的模式,然后返回
x.group(1).upper()
,我们可以从正则表达式中看到,分组元素是连字符或下划线后面的单个字符,这是函数返回和替换的内容。
现在,回答你的要点:
为什么不
[_-](\w+)
工作?
这是因为,当它找到一个hypen时,它会选择它后面的所有字母数字字符,因此它会将下一个单词的整个大写。
他是如何用sub去掉连字符和下划线的?
这很容易回答。这个
回复:sub()
函数替换整个匹配项,而不仅仅是分组元素,在lambda中,他只返回大写的分组元素,而不返回连字符。
成功地将每个单词的第一个字符大写(除了第一个单词)?
当搜索regex模式时,它将查找
立即进行
连字符或下划线,并且第一个单词之前不包含这两个字符中的任何一个。如果你给这个函数提供
'-hello-there'
它将产生:
'HelloThere'
我以为x.group(1).upper()会将整个单词大写,为什么group(1)指的是第一个字符?
这取决于模式,因为模式是
'[_-](.)'
而不是
'[_-](.+)'
,它只匹配一个字符
我希望这对你有所帮助