• notepad++配合正则表达式分组模式处理文本转化为sql语句


    一、正则分组知识点补充

    正则分组和捕获

    ():用于分组和捕获子表达式。

    大白话就是()匹配到的数据,通过美元符号加下标可以获取该数据,例如$1、$2, 下标从1开始。

    下面的案例就采用该模式处理文本数据

    二、使用正则的需求背景

    有一份报表的数据,需要把数据入库到mysql数据库, 因为数据很多,不可能手动一个一个转,这里采用正则表达式,巧妙的转化为对应的sql;

    报表数据如下:

    转换为sql格式如下:

    update menu set content_value = "[{\"label\":\"年订阅\",\"value\":1},{\"label\":\"月订阅\",\"value\":2}]" where id = 17;

    因为id这一列在sql会作为where参数,这里调整下位置,放到后面一列

    里面的数据包含双引号,sql语句特殊处理,需要采用正则表达式做字符串转义。

    复制excel表格的文本到notepad++,数据如下:

    1. [{"label":"苹果","value":1},{"label":"西瓜","value":2}] 17
    2. [{"label":"苹果","value":1},{"label":"西瓜","value":2}] 19
    3. [{"label":"苹果","value":1},{"label":"西瓜","value":2}] 21
    4. [{"label":"没吃过","value":1},{"label":"已经吃过了","value":2}] 22
    5. [{"label":"空","value":""},{"label":"免费","value":"免费"},{"label":"收费","value":"收费"}] 28
    6. [{"label":"空","value":""},{"label":"免费","value":"免费"},{"label":"收费","value":"收费"}] 30
    7. [{"label":"空","value":""},{"label":"免费","value":"免费"},{"label":"收费","value":"收费"}] 32
    8. [{"label":"空","value":""},{"label":"免费","value":"免费"},{"label":"收费","value":"收费"}] 34
    9. [{"label":"模式1","value":0},{"label":"模式2","value":1},{"label":"模式3","value":2}] 67
    10. [{"label":"模式1","value":0},{"label":"模式2","value":1},{"label":"模式3","value":2}] 68
    11. [{"label":"打开","value":true},{"label":"关闭","value":false}] 69
    12. [{"label":"打开","value":true},{"label":"关闭","value":false}] 72

    三、正则分组模式处理文本实践

    3.1、字符串特殊符号转义

    查找目标:"

    替换为:\\\"

    先标记

    替换

    双引号已接上反斜杠, 效果如下:

    1. [{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}] 17
    2. [{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}] 19
    3. [{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}] 21
    4. [{\"label\":\"没吃过\",\"value\":1},{\"label\":\"已经吃过了\",\"value\":2}] 22
    5. [{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 28
    6. [{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 30
    7. [{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 32
    8. [{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 34
    9. [{\"label\":\"模式1\",\"value\":0},{\"label\":\"模式2\",\"value\":1},{\"label\":\"模式3\",\"value\":2}] 67
    10. [{\"label\":\"模式1\",\"value\":0},{\"label\":\"模式2\",\"value\":1},{\"label\":\"模式3\",\"value\":2}] 68
    11. [{\"label\":\"打开\",\"value\":true},{\"label\":\"关闭\",\"value\":false}] 69
    12. [{\"label\":\"打开\",\"value\":true},{\"label\":\"关闭\",\"value\":false}] 72
    3.2、组装sql,拼接前缀

    查找目标:(\[\{)

    替换为:update menu set content_value = "$1

    已拼接上前缀,效果如下:

    1. update menu set content_value = "[{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}] 17
    2. update menu set content_value = "[{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}] 19
    3. update menu set content_value = "[{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}] 21
    4. update menu set content_value = "[{\"label\":\"没吃过\",\"value\":1},{\"label\":\"已经吃过了\",\"value\":2}] 22
    5. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 28
    6. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 30
    7. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 32
    8. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}] 34
    9. update menu set content_value = "[{\"label\":\"模式1\",\"value\":0},{\"label\":\"模式2\",\"value\":1},{\"label\":\"模式3\",\"value\":2}] 67
    10. update menu set content_value = "[{\"label\":\"模式1\",\"value\":0},{\"label\":\"模式2\",\"value\":1},{\"label\":\"模式3\",\"value\":2}] 68
    11. update menu set content_value = "[{\"label\":\"打开\",\"value\":true},{\"label\":\"关闭\",\"value\":false}] 69
    12. update menu set content_value = "[{\"label\":\"打开\",\"value\":true},{\"label\":\"关闭\",\"value\":false}] 72
    3.3、拼接sql的后半截,并换行

    查找目标:(\}\])\s{2}(\d{2})

    替换为:$1\" where id = $2;\r

    效果如下:

    1. update menu set content_value = "[{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}]" where id = 17;
    2. update menu set content_value = "[{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}]" where id = 19;
    3. update menu set content_value = "[{\"label\":\"苹果\",\"value\":1},{\"label\":\"西瓜\",\"value\":2}]" where id = 21;
    4. update menu set content_value = "[{\"label\":\"没吃过\",\"value\":1},{\"label\":\"已经吃过了\",\"value\":2}]" where id = 22;
    5. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}]" where id = 28;
    6. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}]" where id = 30;
    7. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}]" where id = 32;
    8. update menu set content_value = "[{\"label\":\"空\",\"value\":\"\"},{\"label\":\"免费\",\"value\":\"免费\"},{\"label\":\"收费\",\"value\":\"收费\"}]" where id = 34;
    9. update menu set content_value = "[{\"label\":\"模式1\",\"value\":0},{\"label\":\"模式2\",\"value\":1},{\"label\":\"模式3\",\"value\":2}]" where id = 67;
    10. update menu set content_value = "[{\"label\":\"模式1\",\"value\":0},{\"label\":\"模式2\",\"value\":1},{\"label\":\"模式3\",\"value\":2}]" where id = 68;
    11. update menu set content_value = "[{\"label\":\"打开\",\"value\":true},{\"label\":\"关闭\",\"value\":false}]" where id = 69;
    12. update menu set content_value = "[{\"label\":\"打开\",\"value\":true},{\"label\":\"关闭\",\"value\":false}]" where id = 72;
    3.4、最终数据展示效果

  • 相关阅读:
    2.11 教你一套怎么建立自己的选题素材库的方法【玩赚小红书】
    进程与线程
    【学习】如何高效地进行集成测试
    1panel 搭建多个网站
    ctf:kali工具wireshark,nmap
    1044 - Access denied for user ‘root‘@‘%‘ to database
    研发运营一体化(DevOps)能力成熟度模型
    计算两坐标系轴上有对应三点的 旋转变换矩阵(Python)
    2022年第二季度全球网络攻击创新高,如何有效防范网络攻击
    网页大作业代码自取
  • 原文地址:https://blog.csdn.net/ffyyhh995511/article/details/132983742