regex - 从 camelCase 到 SNAKE_CASE 的所有文本

标签 regex notepad++

我正在尝试使用 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 反向引用)。

    enter image description here

    关于regex - 从 camelCase 到 SNAKE_CASE 的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768435/

    相关文章:

    javascript - WordPress 文件的正则表达式

    regex - 如何使用正则表达式删除 2 行模式之间的行?

    python - 为什么使用属性而不是方法可以显着提高 Python 速度

    java - 使用正则表达式模式获取两个表达式之间的所有子字符串(JAVA)

    javascript - 仅使用正则表达式匹配单词后的所有内容

    javascript - 从 HTML 中删除恼人的双引号

    regex - notepad++ - 搜索包含一个字符串但不包含另一个字符串的字符串

    c - K&R 字符计数程序打印 0

    c++ - 使用输入字符串作为函数名 C++

    regex - Notepad++正则表达式加号