Regex 如何捕获除最后一个之外的所有正则表达式组?
如何将camelCase文本转换为大写下划线,但删除后缀 如果我有一个文本AbcdEfghIjklAlphabet,我如何捕获它,使结果成为ABCD_EFGH_IJKL,后缀字母消失Regex 如何捕获除最后一个之外的所有正则表达式组?,regex,Regex,如何将camelCase文本转换为大写下划线,但删除后缀 如果我有一个文本AbcdEfghIjklAlphabet,我如何捕获它,使结果成为ABCD_EFGH_IJKL,后缀字母消失 有没有可能只用正则表达式就可以做到这一点呢?您必须锚定目标的后端。一个可能的候选词是单词边界零宽度断言:\b 一旦你知道了比赛的终点在哪里,在比赛的终点插入一个对任何模式的硬要求,不要捕捉它。大概是这样的: pattern = r'(capture-stuff-at-the-front)But-no-stuff-a
有没有可能只用正则表达式就可以做到这一点呢?您必须锚定目标的后端。一个可能的候选词是单词边界零宽度断言:\b 一旦你知道了比赛的终点在哪里,在比赛的终点插入一个对任何模式的硬要求,不要捕捉它。大概是这样的:
pattern = r'(capture-stuff-at-the-front)But-no-stuff-at-the-end\b'
现在,除了最后一句话或其他什么,你正在捕捉一切。你只需要决定什么是预先准备的东西,以及各种边缘情况是什么。因此:
如果第一个字母是小写的,比如:isCondition,您希望它匹配吗
如果只有一个词,比如:Heavy,这是火柴吗
是否允许使用数字,如果允许,则:rs232是否可以将数字放在前面或后面
等等。我肯定有些东西我没想到
所以试试这个:
pattern = r'((?: uppercase-letter lowercase-letters*)+uppercase-letter lowercase-letters+\b'
这可能与PRPolicy和RequestPolicy匹配,并捕获除最后一个策略之外的所有内容
输出为:
PR
Request
这个解决方案很简单,如果您使用的是一种具有健壮的正则表达式引擎(如Python)的语言,那么就可以完全在正则表达式中完成,而无需循环 图案:[A-Z][A-Z]*?![a-z]*$ 替换:\U\1_ 说明: [A-Z][A-Z]*-匹配大写字母,后跟任意数量的小写字母 ?![a-z]*$-声明与上述模式匹配的字符后面不跟任何数量的小写字母,然后是字符串的结尾,以防止最后一组匹配 …-整个模式都用括号括起来,以便稍后捕获匹配项 替换\U-将后面的输出转换为大写 替换\1-输出第一个捕获组的值
请为您的问题显示更多上下文。您使用的是哪种语言或工具,您是否试图进行替换或选择?您知道如何在不排除后缀的情况下进行替换吗?这需要在Java中完成这项工作独立运行,但Java的replaceAll方法似乎存在问题。有什么想法吗?
PR
Request