regex - 如何捕获除最后一个之外的所有正则表达式组?
问题描述
如何将 camelCase 文本转换为大写下划线但删除后缀?
如果我有一个文本“AbcdEfghIjklAlphabet”,我怎样才能捕获它,以便结果将是“ABCD_EFGH_IJKL”,后缀 Alphabet 消失了?
是否可以仅使用正则表达式来做到这一点?
解决方案
该解决方案很简单,如果您使用具有强大的正则表达式引擎(如 Python)的语言,则可以完全在正则表达式中完成而无需循环。
图案:([A-Z][a-z]*(?![a-z]*$))
代替:\U\1_
解释:
[A-Z][a-z]*
- 匹配一个大写字母后跟任意数量的小写字母。(?![a-z]*$)
- 断言与上述模式匹配的字符后面没有任何数量的小写字母,然后是字符串的末尾,以防止最后一组匹配。(...)
- 整个模式用括号括起来,以便稍后捕获匹配项。(替换)
\U
- 将后面的输出转换为大写。(替换)
\1
- 输出第一个捕获组的值。
推荐阅读
- google-sheets - Google 表格 - 依赖下拉框
- python - Odoo 13'解决员工在odoo考勤中忘记结账的解决方案
- asp.net-mvc - MVC 将斜杠传回 URL
- ruby-on-rails - 具有管理员角色的用户可以拥有多家酒店,但管理员如何仅邀请用户入住其中一家酒店?
- sql - 动态数据透视表
- ionic-framework - 由于缺少@ionic-native/core,StatusBar 插件无法构建
- javascript - 尝试 requestAnimationFrame 但它在滚动时没有响应
- javascript - Vue-Laravel 表单提交
- javascript - jQuery:如果点击移动菜单
- arduino - Arduino - 我需要更改我的代码以插入延迟