regex - 正则表达式:在字符之间查找和替换蛇大小写为 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)*
也没有做任何事情,但我认为这是在获取核心模式以查找所有匹配/重复之后要解决的第二个问题。
我觉得我接近解决方案,但还没有完全解决。当然,我可能对解决方案非常不满意。任何帮助,将不胜感激。
解决方案
这个表情,
(.*\()|(_)([a-z])([a-z]*)|(Criteria.*)
这不是最好的,用类似的东西代替:
$1\U$3\L$4\E$5
可能在这里工作(\E
用于演示)。
如果您可能感兴趣,在右侧面板上的这个演示中解释了表达式。
正则表达式电路
jex.im可视化正则表达式:
推荐阅读
- powerapps-formula - 如何在 Powerapps 中设置多人组合框的 defaultSelectedItems 值?
- ios - 效果如何找出它所附加的 UIImageView 的显示大小?
- python - 如何解决 ValueError:数组长度为 %s,而 DataFrame 的长度为 %s?
- node.js - pdfmake 在服务器端为 CJK、阿拉伯语和其他外语安装自定义字体
- r - 具有动态窗口大小的滚动总和并跳过前几行
- css - 如何在不换行的情况下使 div 中的所有项目等宽?
- java - 如何仅关闭 JDialog 并让 JFrame 仍然可用
- android - 在 Exoplayer 通知中单击暂停按钮时停止动画
- java - 使用 Java 在窗口远程服务器上创建文本文件
- python - 错误:命令“gcc”失败,退出状态为 1 MacOs Catalina