首页 > 解决方案 > 如何捕获除最后一个之外的所有正则表达式组?

问题描述

如何将 camelCase 文本转换为大写下划线但删除后缀?

如果我有一个文本“AbcdEfghIjklAlphabet”,我怎样才能捕获它,以便结果将是“ABCD_EFGH_IJKL”,后缀 Alphabet 消失了?

是否可以仅使用正则表达式来做到这一点?

标签: regex

解决方案


该解决方案很简单,如果您使用具有强大的正则表达式引擎(如 Python)的语言,则可以完全在正则表达式中完成而无需循环。

图案:([A-Z][a-z]*(?![a-z]*$))

代替:\U\1_

解释:

  • [A-Z][a-z]*- 匹配一个大写字母后跟任意数量的小写字母。

  • (?![a-z]*$)- 断言与上述模式匹配的字符后面没有任何数量的小写字母,然后是字符串的末尾,以防止最后一组匹配。

  • (...)- 整个模式用括号括起来,以便稍后捕获匹配项。

  • (替换)\U- 将后面的输出转换为大写。

  • (替换) \1- 输出第一个捕获组的值。


推荐阅读