如何在Python中进行CamelCase拆分

2023-12-10

我想要实现的目标是这样的:

>>> camel_case_split("CamelCaseXYZ")
['Camel', 'Case', 'XYZ']
>>> camel_case_split("XYZCamelCase")
['XYZ', 'Camel', 'Case']

所以我搜索并找到了这个完美的正则表达式:

(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])

作为我尝试的下一个逻辑步骤:

>>> re.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])", "CamelCaseXYZ")
['CamelCaseXYZ']

为什么这不起作用,以及如何从 python 中的链接问题获得结果?

编辑:解决方案摘要

我用一些测试用例测试了所有提供的解决方案:

string:                 ''
AplusKminus:            ['']
casimir_et_hippolyte:   []
two_hundred_success:    []
kalefranz:              string index out of range # with modification: either [] or ['']

string:                 ' '
AplusKminus:            [' ']
casimir_et_hippolyte:   []
two_hundred_success:    [' ']
kalefranz:              [' ']

string:                 'lower'
all algorithms:         ['lower']

string:                 'UPPER'
all algorithms:         ['UPPER']

string:                 'Initial'
all algorithms:         ['Initial']

string:                 'dromedaryCase'
AplusKminus:            ['dromedary', 'Case']
casimir_et_hippolyte:   ['dromedary', 'Case']
two_hundred_success:    ['dromedary', 'Case']
kalefranz:              ['Dromedary', 'Case'] # with modification: ['dromedary', 'Case']

string:                 'CamelCase'
all algorithms:         ['Camel', 'Case']

string:                 'ABCWordDEF'
AplusKminus:            ['ABC', 'Word', 'DEF']
casimir_et_hippolyte:   ['ABC', 'Word', 'DEF']
two_hundred_success:    ['ABC', 'Word', 'DEF']
kalefranz:              ['ABCWord', 'DEF']

总之,您可以说 @kalefranz 的解决方案与问题不匹配(参见最后一个案例),而 @casimir et hippolyte 的解决方案占用了一个空格,从而违反了拆分不应更改各个部分的想法。其余两个替代方案之间的唯一区别是,我的解决方案返回一个列表,其中空字符串输入上包含空字符串,而 @200_success 的解决方案返回一个空列表。 我不知道 python 社区在这个问题上的立场如何,所以我说:我对其中任何一个都很好。由于 200_success 的解决方案更简单,我接受它作为正确答案。


正如@AplusKminus 所解释的,re.split()永远不会在空模式匹配上分裂。因此,您应该尝试找到您感兴趣的组件,而不是拆分。

这是一个使用的解决方案re.finditer()模拟分裂:

def camel_case_split(identifier):
    matches = finditer('.+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)', identifier)
    return [m.group(0) for m in matches]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中进行CamelCase拆分 的相关文章

随机推荐

  • 列表与列表迭代器

    我有一个清单 List myList new ArrayList 要从此列表中获取信息 有两种方法 1 for Object obj myList some code 2 Iterator objIt myList iterator whi
  • GCM 错误服务不可用

    我在注册时遇到问题 GCM 服务器 我的日志中显示一条消息 服务不可用 我尝试了几种选择 但没有得到好的结果 已经启用google play service的依赖 已经检查时钟时间 巴西利亚设置的时区 已经检查了我所知道的一切 下面是我的代
  • 如何从 python 端指定散景图的第 n 个股票代码,其中 n 是股票代码数量

    维护者的注意事项 对 Coffeescript 的支持已弃用 并将在 Bokeh 2 0 中删除 除非我弄错了 否则你只需要访问nth作为实例变量 通过放置this 在它前面 编辑 您还需要使用 粗箭头 gt 在你的过滤器中 这样this已
  • 一次循环5条记录并将其分配给变量

    我有一个包含 811 条记录的表 我想要得到一次五个记录并将其分配给变量 下次当我运行foreach循环任务进入SSIS 它将循环另外五个记录并覆盖变量 我尝试过使用光标进行操作 但找不到解决方案 任何帮助将不胜感激 我有这样的桌子 例如
  • 改造2:如何处理动态响应

    我正在尝试从此 api 获取数据 http www omdbapi com 我正在使用 Retrofit 2 并为第一个 json 创建了一个 pojo 我很好奇的是 当数据不可用时 如何将我的 pojo 转换为第二个 pojo 当有可用数
  • Azure AD 身份验证错误:用户取消了流程

    我正在尝试使用开发我们的应用程序的用户身份验证功能Azure AD并在此过程中遇到一些问题 我已经实施了client flow身份验证使用ADAL库 但当我尝试登录时出现以下错误 Error User cancelled the flow
  • 如何使图像不透明到一定程度?

    我想知道如果在图像视图中设置或设置为相对布局的背景 是否可以使图像不透明 如何使用图像视图或相对布局动态设置图像使图像不透明 或者是否有其他选项可以动态设置图像及其不透明度 我还希望同一图像可以在两个方向上旋转 并且还可以放大和缩小到任何级
  • Python urllib2 无法在备用端口(不是 80)上打开 localhost?错误10013

    这是我的服务器 py import BaseHTTPServer import SocketServer class TestRequestHandler BaseHTTPServer BaseHTTPRequestHandler def
  • FabricJS:垂直对齐文本中心

    我使用的是fabricjs 1 5 并且我一直坚持垂直对齐行中间的文本 我正在使用此代码来设置行高 text setProperty lineHeight scope lineHeight current 它更改画布上文本的行高 但文本始终
  • C++ 中的多语句宏

    In C 是否有可能制作一个多语句宏 with 嵌套 if 语句里面像下面这样吗 我已经尝试了一段时间了 但我遇到了第二个 if 语句无法看到 的范围问题symbol 也许我需要进一步了解宏 define MATCH SYMBOL symb
  • Cassandra 存储桶拆分以调整分区大小

    我对 Cassandra 很陌生 我刚刚通过 Datastax 课程学习了它 但我在此处或互联网上没有找到足够的有关存储桶的信息 并且在我的应用程序中我需要使用存储桶来拆分数据 我有一些工具可以进行很多测量 并且每天拆分测量 时间戳作为分区
  • 点击“显示更多”按钮后如何发布新内容?

    我一直在尝试在用户点击后加载一些附加内容的区域中添加 VO 支持Show more按钮 请参阅随附的屏幕截图 所需行为 我需要 VO 宣布有关附加加载元素的信息 例如 什么是 cookie 以及另外 11 个项目 Tried 方法一 使用
  • 新 Gmail API 中的 RFC822 Message-Id

    我们尝试在使用 gmail api 发送电子邮件时手动设置 RFC822 Message Id 我们已经进行了测试 但发现 Gmail 超越了我们的价值 您知道这是否有原因吗 我们可以为此做点什么吗 是的 邮件发送的 Message Id
  • 尽管图像是正确的白色,但图像并未显示完全白色

    对于闪屏 我使用包含白色背景的图像 纯白色 在 Photoshop 中检查 由于某种原因 它显示了轻微的绿色背景与活动的默认白色背景相比 如屏幕截图中标记的那样 仅在某些设备中 例如 我将其作为框架布局中的单个视图添加到活动中
  • 哪个 zip 库可以与 Ruby 1.9.2 配合良好?

    我之前在 Ruby 1 8 7 中使用过 ruby zip gem 但我听说 ruby zip 不能很好地与 ruby 1 9 2 配合使用 哪些 zip 库适用于 Ruby 1 9 2 你是否真正尝试过使用rubyzip与1 9 2 似乎
  • 将箭头函数与 jQuery 回调一起使用时,“this”关键字的行为有所不同[重复]

    这个问题在这里已经有答案了 我有一个包含多行的表 每行上都有一个edit and delete button 简而言之 当使用 class 触发编辑按钮时 edit 弹出一个表单 除了类名之外 我还添加了一个独特的id like id ed
  • 通过无服务器框架部署到 AWS Lambda 时,将文件打包到应用程序包的特定文件夹中

    Context 我正在使用aws node typescript的例子无服务器框架 我的目标是整合Prisma进去 到目前为止 我有 使用本地创建项目serverless create 在 Railway 上设置 PostgreSQL 数据
  • 如何使用 Google Drive Node.js 断点续传

    嘿 由于 google 云端硬盘正在更改其库 我无法使用基本上传功能上传大于 5MB 的文件创建驱动器文件 文档告诉我 我必须选择可恢复上传 但谷歌驱动器没有提供任何示例代码 而且我在谷歌上找不到任何内容 也许重要的是要知道我可以使用以下命
  • getResources 不起作用/未定义 Java

    我在拨打电话时遇到问题getResources 标准类中的函数 所有导入都必须存在才能使用该功能 我需要什么特殊课程来延长我的课程吗 感谢您的立即帮助 package com example helloandroid import andr
  • 如何在Python中进行CamelCase拆分

    我想要实现的目标是这样的 gt gt gt camel case split CamelCaseXYZ Camel Case XYZ gt gt gt camel case split XYZCamelCase XYZ Camel Case