Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何捕获除最后一个之外的所有正则表达式组?_Regex - Fatal编程技术网

Regex 如何捕获除最后一个之外的所有正则表达式组?

Regex 如何捕获除最后一个之外的所有正则表达式组?,regex,Regex,如何将camelCase文本转换为大写下划线,但删除后缀 如果我有一个文本AbcdEfghIjklAlphabet,我如何捕获它,使结果成为ABCD_EFGH_IJKL,后缀字母消失 有没有可能只用正则表达式就可以做到这一点呢?您必须锚定目标的后端。一个可能的候选词是单词边界零宽度断言:\b 一旦你知道了比赛的终点在哪里,在比赛的终点插入一个对任何模式的硬要求,不要捕捉它。大概是这样的: pattern = r'(capture-stuff-at-the-front)But-no-stuff-a

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

如果我有一个文本AbcdEfghIjklAlphabet,我如何捕获它,使结果成为ABCD_EFGH_IJKL,后缀字母消失


有没有可能只用正则表达式就可以做到这一点呢?

您必须锚定目标的后端。一个可能的候选词是单词边界零宽度断言:\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