我正在尝试使用 Notepad++ 宏进行一些文本操作。我的最后一步是将 camelCase 字符串转换为 SNAKE_CASE。到目前为止还没有运气。我对正则表达式不是很熟悉,所以无法编写自己的解决方案。
示例文本文件输入:
firstLine(874),
secondLine(15),
thirdLineOfText87(0x0001);
期望的输出:
FIRST_LINE(874),
SECOND_LINE(15),
THIRD_LINE_OF_TEXT_87(0x0001);
正则表达式或任何插件都是可以接受的答案。
最佳答案
我建议采用以下正则表达式方法:
查找内容: (\b[a-z]+|\G(?!^))((?:[A-Z]|\d+)[a-z]*)
替换为:\U\1_\2
火柴盒:开 .
这将变成 camelCase87LikeThis
话到 CAMEL_CASE_87_LIKE_THIS
.如果您需要添加对以大写字母开头的 Camel 字的支持,请使用以下正则表达式修改:
(\G(?!^)|\b[a-zA-Z][a-z]*)([A-Z][a-z]*|\d+)
见regex demo (也在 Notepad++ 中测试过)。注意
\G
的位置在正则表达式中添加 A-Z
.详情 :
(\b[a-z]+|\G(?!^))
- 第 1 组捕获两种选择中的任何一种:\b[a-z]+
- 单词的开头(\b
是这里的初始单词边界),后跟 1+ 个小写 ASCII 字母 |
- 或 \G(?!^)
- 上一次成功匹配的结束位置((?:[A-Z]|\d+)[a-z]*)
- 第 2 组捕获:(?:[A-Z]|\d+)
- 大写 ASCII 字母 ( [A-Z]
) 或 ( |
) 1+ 位 ( \d+
) [a-z]*
- 0+ 小写 ASCII 字母。 \U\1_\2
替换模式使用 \U
将所有字符转换为大写并插入 _
在两组之间(插入 \1
和 \2
反向引用)。关于regex - 从 camelCase 到 SNAKE_CASE 的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768435/