首页 > 解决方案 > 正则表达式:在字符之间查找和替换蛇大小写为 UpperCamelCase/PascalCase

问题描述

我正在使用我的 IDE 的查找和替换(带 RegEx)功能来查找和替换参数的类型参数以从蛇形大小写到 PascalCase(AKA UpperCamelCase)。整个项目中有几个文件和行需要更改,手动这样做很容易出错且乏味(另外我确信我将再次需要基本模式以进行将来的更改)。

例如:

CURRENT: function find_all_by_name_and_status(_i_find_all_by_name_and_statusCriteria find_all_by_name_and_status_criteria) ...

应该:

DESIRED: function find_all_by_name_and_status(IFindAllByNameAndStatusCriteria find_all_by_name_and_status_criteria) ...

我使用的模式如下:

FIND: (?<=\()_(.)(Criteria)*

REPLACE: \U$1\L

据我所知,如果第一个找到的捕获组是正确的(“_”后面的字母),替换模式将起作用。

的核心模式_(.)找到要替换的正确组件,但是,它也捕获字符串的其他部分。因此,我添加了一个积极的后视,从左(?<=\()括号开始,并为(Criteria)*. 整个模式似乎导致核心模式只匹配一次而不是重复。(?R)似乎也没有帮助。

附言

它看起来(Criteria)*也没有做任何事情,但我认为这是在获取核心模式以查找所有匹配/重复之后要解决的第二个问题。

我觉得我接近解决方案,但还没有完全解决。当然,我可能对解决方案非常不满意。任何帮助,将不胜感激。

标签: regexreplaceidetext-editor

解决方案


这个表情,

(.*\()|(_)([a-z])([a-z]*)|(Criteria.*)

这不是最好的,用类似的东西代替:

$1\U$3\L$4\E$5

可能在这里工作(\E用于演示)。

如果您可能感兴趣,在右侧面板上的这个演示中解释了表达式。

正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读