pyqt5如何做正则表达式验证软件
展开全部 首先,我照着前面提到的网页,大致画了个界面,包括三个 checkBox、两个 textEdit 和两个 label,分别放在三个 layout 里面大概就是下面这个界面: 保存后会得到一个扩展名为 .ui 的文件。
比如我得到了一个 RegexTester.ui。
然后打开 cmd 命令行,切换到当前目录,输入以下命令: pyuic4 -o regexTesterUi.py RegexTester.ui,回车,就能根据画好的 ui 文件生成一个 py 文件。
这时可以写一个测试脚本来运行一下这个界面。
1 from PyQt4.QtGui import * 2 from PyQt4.QtCore import * 3 import sys 4 import regexTesterUi 5 6 class TestDialog(QDialog,regexTesterUi.Ui_Dialog): 7 def __init__(self,parent=None): 8 super(TestDialog,self).__init__(parent) 9 self.setupUi(self)10 11 if __name__ == '__main__':12 app=QApplication(sys.argv)13 dialog=TestDialog()14 dialog.show()15 app.exec_() 运行这个脚本,我们就可以得到刚才画的那个 GUI 界面,并且可以选中三个 checkBox ,在两个 textEdit 里面输入文本。
只是除此之外没有任何功能。
现在界面已经做好,我们需要做的就是实现高亮匹配数据的功能。
首先我们来完善一下这个类,我们需要的变量为输入的正则表达式、输入的测试数据、三个匹配模式(大小写敏感、多行匹配、点匹配所有)。
1 class RegexTesterDialog(QtGui.QDialog, regexTesterUi.Ui_Dialog): 2 3 def __init__(self, parent = None): 4 super(RegexTesterDialog, self).__init__(parent) 5 6 self.CI = False # case insensitive (i) 7 self.MB = False # ^$ match at line breaks (m) 8 self.DM = False # dot matched all (s) 9 self.regex = ''10 self.data = ''11 12 self.ui = regexTesterUi.Ui_Dialog()13 self.ui.setupUi(self) 响应功能: 由于这个界面并没有按钮,我需要程序检测到任何一点变动就改变高亮的部分。
这里就涉及到 Qt 的信号和槽机制。
本文就不复述这些知识,具体可以参考 QT的信号与槽机制介绍。
这里我们就要用到 QTextEdit 控件的 textChanged() 信号函数。
具体的介绍可以查看 Qt 在线文档。
这个信号函数在检测到 QTextEdit 控件中的文本发生了变化的时候会发射一个信号,与其关联的槽函数就会立即执行。
而把这个信号函数和槽函数关联起来的方法就是 connect() 方法。
这个网上也有很多介绍,这里我来介绍一个更 pythonic 的方法,使用 Python 的装饰器。
PyQt中支持同名传递信号,就是说根据控件的名字来自动选择哪个槽。
比如这里提到的 textChanged() 信号函数,如果要响应这个文本变化信号,可以这么做: @QtCore.pyqtSlot() # 该装饰器标志此函数为接收信号的槽函数def on_textEdit_Regex_textChanged(self): # 槽函数名标准格式 【on_控件名字_信号函数名字】self.regex = self.ui.textEdit_Regex.toPlainText()self.ui.textEdit_Data.setText(self.regex) 这里在槽函数上面加一个装饰器表示这个函数为接收信号的槽函数,然后根据控件名和信号函数名命名一个槽函数,这里我的接收正则表达式输入的 QTextEdit 控件名为 textEdit_Regex,因此这个槽函数名为 on_textEdit_Regex_textChanged。
在这个槽函数里,我们通过 toPlainText() 方法得到文本框中的文本数据,然后将 textEdit_Data 中的数据设置为我们输入的值,这样就可以测试这个槽函数运行是否正确。
当测试 textEdit_Data 控件的信号和槽函数时,也可以利用 textEdit_Regex 来输出结果。
除了 QTextEdit 控件,我们的界面还有 QCheckBox 控件。
去查一下文档,可以找到这个控件的信号函数为 stateChanged(int)。
我们发现这个函数带有一个参数,使用之前的方法会发现无法发射信号,这里我们需要在装饰器和槽函数中加入这个参数: @QtCore.pyqtSlot(int)def on_checkBox_CI_stateChanged(self, value): if self.ui.checkBox_CI.isChecked(): self.CI = Trueself.ui.textEdit_Data.setText('True') else: self.CI = Falseself.ui.textEdit_Data.setText('False') 虽然我们不知道这个参数是什么,但只要加进来,就可以正常使用。
同理,碰到需要两个参数的信号函数时,只要再加一个参数就行。
这里,当接收到 stateChanged(int) 信号时,我们使用 isChecked() 方法来检查控件是否被选中。
如果选中了,则返回真,否则返回假。
这里我们同样用到了 QTextEdit 控件来输出结果测试信号是否正确。
其他两个 QCheckBox 控件同样设置。
匹配功能: 完成基本的响应函数之后,就要开始实现匹配功能。
这里很简单,直接调用 re 模块,使用 findall() 方法。
由于有三个 checkBox 提供三种匹配模式: re.I (全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)re.M (全拼:MULTILINE): 多行模式,改变'^'和'$'的行为re.S (全拼:DOTALL): 点任意匹配模式,改变'.'的行为因此总共有 23 =8 种匹配模式: 1 def matchData(self): 2 if (not self.CI) and (not self.MB) and (not self.DM): 3 pattern = re.compile(self.regex) 4 elif (not self.CI) and (not self.MB) and (self.DM): 5 pattern = re.compile(self.regex, re.S) 6 elif (not self.CI) and (self.MB) and (not self.DM): 7 pattern = re.compile(self.regex, re.M) 8 elif (not self.CI) and (self.MB) and (self.DM): 9 pattern = re....
关于正则表达式
obj\<\<(.[^A]*)A(.[^A]*)\>\>endobjHex(0A) 在vbs中会出错,去掉0,Hex(0A)=A -----------------------------------------正则表达式只能作用于单行。
如果要匹配换行符,请在使用之前将换行符转换为特定的字符串,然后来搜索该特定的字符串。
vb中str=replace(str,vbcrlf,"{ABAA}")使用正则的代码str=replace(str,"{ABAA}",vbcrlf)
如何用正则表达式检测ip是否正确,求详解
展开全部 ip的正则表达式:格式是由“.”分割的四部分,每部分的范围是0-255;每段的正则可以分几部分来写:200—255;100-199;10-99;0-9;每一部分对应的正则表达式: 2[0-4]\d|25[0-5]; 1\d{2}; [1-9]\d; \d所以连起来就是\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]那么IP的正则就是(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])在JS中表示为:/^(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/...
用js的正则表达式检测电话号码,要求必须是1开头,只能是11位数字...
表达式写法是:/^1\d{10}$/解析:^1 以1开头,\d表示数字,\d{10}表示数字出现10次,加上前面以1开头,正好是11个数字,X$表示以X结尾,这里用$表示后面没有了,11个数字后已经是匹配字符串的结尾。
结果展示:正则表达式,又称规则表达式。
(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。
例如,在Perl中就内建了一个功能强大的正则表达式引擎。
正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
如何用正则表达式检测ip是否正确,求详解
ip的正则表达式:格式是由“.”分割的四部分,每部分的范围是0-255;每段的正则可以分几部分来写:200—255;100-199;10-99;0-9;每一部分对应的正则表达式: 2[0-4]\d|25[0-5]; 1\d{2}; [1-9]\d; \d所以连起来就是\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]那么IP的正则就是(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])在JS中表示为:/^(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/
jQuery中测试一组class的正则 如何用正则表达式来匹配这一组class
由来:1)美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。
2)在1956 年,出生在被马克·吐温(Mark Twain)称为“美国最美丽的城市之一”的哈特福德市的一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。
正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。
3)之后一段时间,人们发现可以将这一工作成果应用于其他方面。
Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。
Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。
PHP正则表达式如何检测现有的正确邮箱域名后缀?
这个是IT群里的朋友!我不去群里了,在这里帮你把问题解决了吧!其实严格说来,正则表达式只是一个模型匹配,所以直接使用模型匹配时我们有一个高通原理,也就是说匹配出来的内容是要大于你所需要的内容。
就比此题来说,后边可以匹配任何一个合规则的内容,而不可能精确地直接是你想要的内容——这就是高通,如果非要匹配到你想要的内容,使用正则运算有时是非常不合适的!所以这里不建议你使用这方式,或者是部分使用这种方式的形式。
高通就是通过你不全是你想要的,但你想要的一定全在里边。
那么,为什么不考虑使用ajax的方式呢?后台自己设计一会数据库,@前半段使用正则表这式,扣后半段直接使用数据存储的内容,这样可以精确到任何一个你想要的。
因为这里你想要的与不想要的其实也很模糊,你也不知道ckk这个域名在以后是不会被启用!那么你可以使用数据库方式,由管理员自由添加!不用去修改那将来的表达式的!但事实上很少人用这种方式——他们都在使用注册时邮箱认证的方式,也就是说,发到你邮箱里一封信,辅助你完成注册,这种情况虽然是高通,其他实他只是方便用户能输入正确,而不是要的确信数据,任何设计都要记着这句话——任何客户端的信息都是不可信的!就算用JS完成了正则,那么如果对方有意屏掉您的JS这十分容易的!所以你的正则根本不是用来验证,而是方便用户。
正是这种原因,高通的理由也是其存在的一个原因!就算使用了我说的数据库,利用ajax来检查,那么别人照样可以让你的ajax不工作,而且,不是服务器通过了,邮箱就一定有人注册的!所以从这方面上来讲,数据库的实现意义也不大!根据js的特点,客户端的验证没有必要太这于麻烦,就算是服务端的验证,建议你的也只采用这种方式即可。
没有使用数据库的必要的——这个代价与达到的效果是不成比例的!说完了,其实等于我也不解决!
孤者何惧ii