Python:将字符串从任何格式转换为 CamelCase

Python: convert a string from any format into CamelCase

请向我解释以下 Python 代码。这个答案在 CodeWars 上提交时有效,我希望帮助理解它的来龙去脉。这个程序的每一步都发生了什么?

from re import split

def camelize(string):
    return ''.join(a.capitalize() for a in split('([^a-zA-Z0-9])', string)
       if a.isalnum())

这是一个测试示例:
camelize("example name") # => 示例名称

函数的输入是字符串。

isalnum() :方法isalnum()检查字符串是否由字母数字字符组成。

.join() : Python String join() ,join() 是一个字符串方法,它 returns 一个字符串与 iterable

的元素连接

capitalize():它return是字符串的副本,只有第一个字符大写。

split() :方法 split() return 是字符串中所有单词的列表。

以上理解将 return 给定输入字符串的输出

好的!正则表达式的东西一开始很难看和理解。首先,让我们将其分解为事情发生的顺序。让我们使用示例输入 "test_of wORd editor"

首先,我们用split('([^a-zA-Z0-9])', string)将字符串分割成一个列表。这会根据 不是 字母(大写或小写)或数字的每个字符拆分。这会将我们的输入转换为 ['test', '_', 'of', ' ', 'wORd', ' ', 'editor'].

接下来,我们将通过询问列表中的每个元素是否都是带有 .isalnum() 的字母数字来仅保留列表的一部分。如果不是,我们将忽略列表中的那部分。如果它是字母数字,我们对列表中的每个元素调用 .capitalize(),这会将元素转换为除第一个字符以外的所有小写字母,它是大写字母。这是一个内置的 python 函数,它正在执行您想要的内容。这两部分一起使用 list comprehension 完成。我假设你知道那是什么。此输出将是 ['Test', 'Of', 'Word', 'Editor'].

最后,我们需要将列表连接在一起再次成为一个字符串。 ''.join() 将列表中的每个元素无空格组合在一起,返回 'TestOfWordEditor'.

camelize 函数将接收字符串 string 并将其拆分为连续的字母数字字符的字符串

split('([^a-zA-Z0-9])', "example name") # => ['example', ' ', 'name']

拆分结果的每个字符串都会大写

[a.capitalize() for a in ['example', ' ', 'name']] # => ['Example', ' ', 'Name']

并将使用 isalnum() 条件进行过滤,检查字符串是否只包含字母数字字符(删除数组的 space 元素)

[a.capitalize() for a in ['example', ' ', 'name'] if a.isalnum()] # => ['Example', 'Name']

然后将使用分隔符 ''(空字符串)进行连接。

''.join(a.capitalize() for a in ['example', ' ', 'name'] if a.isalnum()) # => 'ExampleName'