总流程

  • 分析需求
  • 代码实现
  • 代码说明
    • 1. self.rule
    • 2. self.columns和self.rule_button
    • 3. self.window_location
  • 下步改进
    • 1. self.rule的改进
    • 2. self.columns和self.rule_button的改进
    • 3.需要修改界面的情况

分析需求

对于很多人来说,正则表达式可能需要经常去搜索,我自己就经常用菜鸟教程来搜,所以就想自己写一个正则的编辑器,这样只要第一次好好搜索,之后可以用按钮来代替搜索。

代码实现

import PySimpleGUI as sg
import pyperclipclass RegularSearch:def __init__(self):sg.theme('LightBlue2')self.window = Noneself.window_location = (0, 0)self.rule = {# Todo 此处可以自行增加键值,增加后,选项会相应自动增加'手机号': r'^1((34[0-8])|(8\d{2})|(([35][0-35-9]|4[579]|66|7[35678]|9[1389])\d{1}))\d{7}$','座机号': r'^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$','统一社会信用代码': r'^(([0-9A-Za-z]{15})|([0-9A-Za-z]{18})|([0-9A-Za-z]{20}))$','18位身份证': r'^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$','银行卡号': r'^[1-9]\d{11,29}$','股票代码(A股)': r'^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$','车牌号': r'^(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(?:(?:[0-9]{5}[DF])|(?:[DF](?:[A-HJ-NP-Z0-9])[0-9]{4})))|(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$','中文姓名': r'^(?:[\u4e00-\u9fa5·]{2,4})$','英文姓名': r'^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$','中文': r'^[\u4E00-\u9FA5]+$','中文和数字': r'^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$',}self.columns = 2  # Todo 这个表示每行有几个按钮,比如2就是每行有2个按钮(即2列按钮)。通过调整这个数和下面的self.rule_button就可以自己增减按钮self.rule_button = {# Todo 此处可以自行增加键值,增加后,按钮会相应自动增加'开头': r'^', '结尾': r'$','英文': r'[A-Za-z]', '汉字': r'[\u4E00-\u9FA5]','数字': r'\d', '英文数字': r'\w','空格': r'\s', '任意字符': r'.', '或': '|','0或1个': r'?', '0或多个': r'*', '1或多个': r'+','局部开始': r'\A', '局部结束': r'\Z','星号': r'\*', '小数点': r'\.'}self.rule_editor_gui()def make_layout(self):lay1 = sg.Col([[sg.ML('', k='rule_multiline', size=(50, 10), font=20, focus=True, enter_submits=True)],[sg.B('复制表达式'), sg.P(), sg.Combo(list(self.rule.keys()), default_value='常用正则', readonly=True,enable_events=True, key='rule', size=(22, 1), visible=True)]])keys = list(self.rule_button.keys())row_quality = len(keys) // self.columns  # self.columns为每行的数量(即列数)if row_quality != len(keys) / self.columns:row_quality += 1lay2 = []i = j = -1for x in list(self.rule_button.keys()):i += 1if i % self.columns == 0:lay2.append([sg.B(x, k=x, size=(7, 1), visible=True)])j += 1else:lay2[j].append(sg.B(x, k=x, size=(7, 1), visible=True))lay2 = sg.Col(lay2, vertical_alignment='top')lay = [[lay1, lay2]]return laydef rule_editor_gui(self):layout = self.make_layout()self.window = sg.Window('正则编辑器', layout, keep_on_top=True, modal=True)while True:event1, values1 = self.window.read()if event1 in (None, 'Cancel'):breakelse:self.window_location = (self.window.current_location()[0]+300, self.window.current_location()[1]+100)if event1 == '复制表达式':text = values1['rule_multiline']pyperclip.copy(text)sg.PopupOK('已复制到剪贴板', keep_on_top=True, location=self.window_location)if event1 in self.rule_button.keys():# Todo 这里可以根据自己需求优化逻辑old_text = self.window['rule_multiline'].get()if event1 == '开头':text = self.rule_button[event1] + old_textelse:text = old_text + self.rule_button[event1]self.window['rule_multiline'].update(value=text)self.window['rule_multiline'].set_focus(True)self.window.close()if __name__ == '__main__':RegularSearch()

代码说明

1. self.rule

可以用来保存一些常用的正则

2. self.columns和self.rule_button

它们联合作用,可以调整每行有几个按钮,以及按钮的总数量

3. self.window_location

它是为了给弹窗提供一个坐标,这样编辑器窗口移动时,弹窗就会跟着移动,不过因为我没有考虑窗口本身的大小,所以如果窗口形状变化较大,可能弹窗的位置就会不在编辑器内。当然,这不是大问题

下步改进

1. self.rule的改进

可以使用文本文档或json文件来保存,启动界面前读取文件,将内容读成字典,赋值给self.rule。这样程序打包以后,就可以通过更改文本文档或json文件来增减选项了

2. self.columns和self.rule_button的改进

同理,也可以通过文件来存储和修改。

3.需要修改界面的情况

如果改动太大,比如按钮加的特别多,界面的形状可能会变的比较奇怪,那么还是需要修改界面代码,调整位置(比如把正则按钮放在“复制表达式”按钮的下面)

使用PySimpleGUI模块,写一个正则表达式的编辑器相关推荐

  1. 用JavaScript写一个正则表达式测试工具

    用JavaScript写一个正则表达式测试工具 <!DOCTYPE html> <html><head><meta charset="utf-8&q ...

  2. 让我们写一个 Win32 文本编辑器吧 - 1. 简介

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  3. 用 Python 的GUI 库 PySimpleGUI,写一个肥胖指数计算工具,Python开发就是这么简单

    Python 的 GUI 库 PySimpleGUI,写一个简单的有界面的小工具很简单!这里我们来写一个计算肥胖指数(BMI)的小工具.首先,通过百度得到 BMI 指数的计算公式为: 体重 / (身高 ...

  4. Python: pyqt5 自己写一个窗口文本编辑器

    PyQt5是Digia的一套Qt5应用框架与python的结合,同时支持2.x和3.x.Qt库由Riverbank Computing开发,是最强大的GUI库之一. >>> 今天,我 ...

  5. vue-electron 写一个markdown文章编辑器(一)

    缘起 以前看过一篇帖子,很多写作爱好者讨论写作时用什么markdown编辑器好,可惜当时我连markdown是何物都不知道,事后百度才明白是一种新的写作方式,语法很是简单,操作很是方便,让我这个只知道 ...

  6. 原生js写一个简单的编辑器

    js原生写的编辑器,主要是使用document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)来实现的 如果该指令不被支持或停用将会 ...

  7. 使用wx模块写一个微信自动回复的python代码

    要编写一个能够自动回复微信消息的Python代码,需要使用微信机器人框架,如itchat或wxpy,我这里以wxpy为例.下面是一个基本的微信自动回复代码示例: import wxpy# 初始化机器人 ...

  8. python利用scapy模块写一个TCP路由追踪和扫描存活IP的脚本

    前言: 没有前言 0x01 from scapy.all import * import sys from socket import * import os from threading impor ...

  9. BoooLee pyretoolkit -- 一个基于python re模块的在线正则表达式测试工具

    为了学习python re模块正则表达式,寻找了一些正则表达式工具,除了komodo捆绑的rx toolkit外,其他的测试工具都是基于.net或其他引擎的,语法上多少有点出入. 干错自己写一个,用了 ...

最新文章

  1. JavaScript初学者应注意的七个细节
  2. 「GAN」如何生动有趣地对GAN进行可视化?Google的GAN Lab请了解
  3. SQLServer之PRIMARY KEY约束
  4. python基础一 day6 文件操作
  5. 用instrument的僵尸工具
  6. 【其他】命名风格之unix like风格,Windows风格,ST固件库风格,驼峰命名
  7. RabbitMq学习笔记006---修改RabbitMq端口号和心跳时间
  8. myeclipse 2017 CI 中如何修改Servlet模板
  9. Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)
  10. 数据质量管理的核心要素和技术原则
  11. xd使用技巧_真香!3个技巧,帮你获得面试机率提升300%
  12. 双非大学计算机专业有不考408,2020河北大学计算机专业课改考408
  13. 数据挖掘与分析应用1:Excel表数据分析,sum,sumif,sumifs,vlookup,match,index,几个配合使用
  14. 结合python使用ffmpeg将批量ts文件合成mp4。
  15. Opencv C++成长之路(八):高斯双边滤波 (图像处理磨皮)
  16. 个人怎么做自适应网站
  17. 怎么清理c盘的垃圾文件?有什么好的清理方法推荐?
  18. C#网口通信和串口数据互相转发
  19. 静态网页怎么搭建在服务器上,云服务器搭建静态网页教程
  20. 迅雷金融於菲发公开信,边缘计算、区块链是迅雷的“皇帝新衣”?

热门文章

  1. 密码库LibTomCrypt学习记录——(2.11)分组密码算法的工作模式——CTR代码示例
  2. 调用 from sklearn.datasets import fetch_lfw_people 出现HTTPError 403错误
  3. java amp 0xff6_BuuCTF Web Writeup 第一部分
  4. linux python定时任务调度,Python下定时任务框架APScheduler的使用
  5. nodejs下载安装、npm环境配置、yarn下载与环境配置
  6. linux dig命令_如何在Linux上使用dig命令
  7. pythonn阶杨辉三角_Python实现杨辉三角
  8. Shiro-550 漏洞复现
  9. 单位序列响应和阶跃响应的z域分析 matlab,信号与系统 [薛莲,周茉,刘少敏 主编] 2015年版...
  10. STM32移植LWIP网线热插入网络不通的解决办法