所以要理解这段代码,您必须理解一点正则表达式和一点
re
Python module
. 我们先看看
re.sub
做。从文档来看,函数的签名如下
re.sub(pattern, repl, string, count=0, flags=0)
重要的是
pattern
,
repl
,和
string
参数。
-
图案
是要替换的正则表达式模式
-
回复
是要将匹配的模式替换为的,可以是以匹配对象作为参数的字符串或函数
-
一串
是要替换的字符串
函数用于查找
一串
符合正则表达式的
图案
,并将这些部分替换为
回复
.
现在让我们进入使用的正则表达式:
[_-](.)
.
现在让我们把这一切放在一起。完整的模式将匹配两个字符。第一个字符将是
_
或
-
第二个角色可以是任何东西。实际上,以下字符串的粗体部分将被匹配。
-
一
_t型
世界
-
测试
_3个
-
游牧-
-
这个遗嘱
_米
阿奇
-
正常人_
-
需要
_米
矿石
_c类
创造性的
_e类
示例-
重要的是
(.)
regex的一部分匹配任何字符并将其存储在捕获组中,这允许我们在
回复
部分论点。
我们来看看
回复
就在这里。在这种情况下,
回复
是一个
lambda function
.
lambda x: x.group(1).upper()
lambda与普通的Python函数没有太大区别。在冒号之前定义参数,然后在冒号之后定义返回表达式。上面的羔羊
x
作为一个论点,它假设
十
是一个
match object
. 匹配对象具有
group
方法,该方法允许您引用与regex模式匹配的组(请记住
(.)
从以前开始?)。它获取匹配的第一组,并使用
str
对象的内置
upper
方法。然后它返回大写的字符串,这就是替换匹配的
图案
.
现在一起:
import re
def to_camel_case(text):
return re.sub('[_-](.)', lambda x: x.group(1).upper(), text)
这个
图案
是
[_-](.)
它匹配任何下划线或破折号后跟任何字符。使用
回复
lambda函数。部分
一串
然后将匹配该模式的字符替换为大写字符。
最后,我认为以上回答了您的大部分问题,但总结一下:
我查找了re.sub()和group(),但仍然无法将其组合在一起。我不知道怎么做
[_-](.)
工作,为什么
[_-](w+)
不起作用?
我想你是想用
\w
字符集,而不是
w
. 这个
\西
字符集匹配所有字母数字字符和下划线。如果
+
未使用运算符。这个
+
贪婪地匹配字符,因此它将导致属于
\西
设置要捕获的下划线或连字符后面的内容。这会导致两个问题:它将所有捕获的字符(可能是一个完整的单词)大写,并捕获下划线,导致以后的下划线无法正确替换。
他是怎么学会用sub连字符和下划线的?
赋予
回复
只返回第一个捕获组的大写版本。在模式中
[-_](.)
,只捕获连字符或下划线后面的字符。实际上,模式
[-_](.)
匹配并替换为大写字符
(.)
. 这就是连字符/下划线被删除的原因。
是否成功地将每个单词的第一个字符(第一个单词除外)大写?
我以为x.group(1).upper()会将整个单词大写,为什么group(1)指的是第一个字符?
捕获组只匹配下划线或连字符后面的第一个字符,因此这是大写的。