4. 正则表达式的案例实战
优质
小牛编辑
129浏览
2023-12-01
4.1 正则表达式在Python中的使用--解析数据
案例要求:如下图所示有一个网页文件,请使用Python的正则将网页中的超级链接信息(名称和url地址)解析处理
实现步骤:使用open()、read()读取文件内容,导入re模块,使用正则匹配后遍历输出。
<!DOCTYPE html>
<html>
<head>
<title>Python 正则表达式实例</title>
</head>
<body>
<h2>常用网站链接</h2>
<ul>
<li><a href="https://www.python.org">Python官方网站</a></li>
<li><a href="https://www.djangoproject.com">Django官方网站</a></li>
<li><a href="https://www.baidu.com">百度搜索引擎</a></li>
<li><a href="https://blog.csdn.net">CSDN官方网站</a></li>
<li><a href="https://edu.csdn.net/">CSDN学院</a></li>
</ul>
</body>
</html>
- 实现代码:
import re
f = open("./index.html","r")
content = f.read()
f.close()
#print(content)
title = re.search("<title>(.*?)</title>",content)
if title:
print(title)
print("标题:"+title.group())
alist = re.findall('<a href="(.*?)">(.*?)</a>',content)
for ov in alist:
print(ov[1]+":"+ov[0])
`
4.2 正则表达式在JavaScript中的使用--表单验证
- 案例要求:参考下图,使用JavaScript语言实现页面中表单的验证功能。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>JavaScript--实例</title>
</head>
<body>
<h3 id="hid">JavaScript实例--表单事件</h3>
<form action="my.html" name="myform" method="post" onsubmit="return doSubmit()">
账号:<input type="text" name="uname"/> 8-16位的有效字符<br/><br/>
密码:<input type="password" name="upass"/> 6-18位<br/><br/>
邮箱:<input type="text" name="email"/> <br/><br/>
<input type="submit" value="提交"/>
</form>
<script type="text/javascript">
//表单提交事件处理
function doSubmit(){
//验证账号
var name = document.myform.uname.value;
if(name.match(/^\w{8,16}$/)==null){
alert("账号必须为8-16的有效字符!");
return false;
}
//验证密码
var pass = document.myform.upass.value;
if(pass.match(/^.{6,18}$/)==null){
alert("密码必须为6-18位!");
return false;
}
//验证邮箱
var email = document.myform.email.value;
if(email.match(/^\w+@\w+(\.\w+){1,2}$/)==null){
alert("请输入正确的Email地址!");
return false;
}
return true;
}
</script>
</body>
</html>
4.3 正则表达式在MySQL数据库中的使用--数据查询
MariaDB [mydb]> select * from stu;
+----+----------+-----+-----+----------+
| id | name | age | sex | classid |
+----+----------+-----+-----+----------+
| 1 | zhangsan | 22 | m | python03 |
| 2 | lisi | 25 | w | python04 |
| 3 | wangwu | 20 | m | python03 |
| 4 | zhaoliu | 19 | w | python04 |
| 5 | qq01 | 20 | m | python03 |
| 6 | qqmn | 21 | w | python04 |
| 7 | qq03 | 20 | m | python05 |
| 8 | uu01 | 21 | w | python04 |
| 9 | uu02 | 20 | m | python05 |
| 10 | aa | 29 | w | python03 |
| 11 | bb | 20 | m | python04 |
| 16 | abc | 25 | m | python05 |
+----+----------+-----+-----+----------+
12 rows in set (0.00 sec)
-- 使用正则查询姓名是使用任意两位小写字母构成的数据信息
MariaDB [mydb]> select * from stu where name regexp '^[a-z]{2}$';
+----+------+-----+-----+----------+
| id | name | age | sex | classid |
+----+------+-----+-----+----------+
| 10 | aa | 29 | w | python03 |
| 11 | bb | 20 | m | python04 |
+----+------+-----+-----+----------+
2 rows in set (0.00 sec)
--查询name的值为2~4位的小写字母
MariaDB [mydb]> select * from stu where name regexp '^[a-z]{2,4}$';
+----+------+-----+-----+----------+
| id | name | age | sex | classid |
+----+------+-----+-----+----------+
| 2 | lisi | 25 | w | python04 |
| 6 | qqmn | 21 | w | python04 |
| 10 | aa | 29 | w | python03 |
| 11 | bb | 20 | m | python04 |
| 16 | abc | 25 | m | python05 |
+----+------+-----+-----+----------+
5 rows in set (0.00 sec)
-- 查询name字段值是由两位字母加两位数字构成的数据信息
MariaDB [mydb]> select * from stu where name regexp '^[a-z]{2}[0-9]{2}$';
+----+------+-----+-----+----------+
| id | name | age | sex | classid |
+----+------+-----+-----+----------+
| 5 | qq01 | 20 | m | python03 |
| 7 | qq03 | 20 | m | python05 |
| 8 | uu01 | 21 | w | python04 |
| 9 | uu02 | 20 | m | python05 |
+----+------+-----+-----+----------+
4 rows in set (0.00 sec)
MariaDB [mydb]>