网站正在建设中 模版,wordpress 分页地址,网站群建设存在的问题,做网站前景怎样正则表达式
匹配单次
. #xff1a;匹配任意一个字符
[ ] #xff1a;匹配[ ]里举例的任意一个字符
/d #xff1a;匹配数字0-9
/D #xff1a;匹配非数字
/s #xff1a;匹配空白或tab建
/S #xff1a;匹配非空白
/w #xff1a;…正则表达式
匹配单次
. 匹配任意一个字符
[ ] 匹配[ ]里举例的任意一个字符
/d 匹配数字0-9
/D 匹配非数字
/s 匹配空白或tab建
/S 匹配非空白
/w 匹配非特殊字符a-z, A-Z, 0-9, 汉字
/W 匹配特殊字符匹配不定次数
* 匹配前一个字符出现0次到无数次匹配前一个字符出现至少一次
? 匹配前一个字符出现1次或0次
{m} 匹配前一个字符出现m次
bash
[0-9]{6}匹配一串字符串的前六个数字。运用场景假设你爬取到了手机锁屏6位密码数据库中的数据可以用它做筛选{m,n} 匹配前一个字符出现m次到n次
bash
[0-9a-z_]{8,20}匹配长度8到20位的数字或小写字母或_,可以运用于设置密码格式
匹配开头或结尾
^ :匹配字符开头
$ :匹配字符结尾
[^指定字符] : 与^[ ]完全相反匹配不是[ ]里举例字符开头
bash
[^a]匹配不是以字母a开头
^[a]匹配以字母a开头★匹配分组相关
| 匹配左右两边任意一个正则表达式
text 123756786SSSSixstar
text2 abc
result re.match(^[0-9]\d*\w*|abc, text2) # 输出abc
result2 re.match(^[0-9]\d*\w*|abc, text) # 输出123756786SSSSixstar() :将括号作为一个分组。以下面举例解释
你获取了一个有关邮箱的数据库内容但是你不知道邮箱的格式是qq.com163.com139.com
data [123756786qq.com, test139.com, jdfasljsafa163.com]
for i in range(0, len(data)):result re.match(([\w]{4,20})(qq.com|139.com|163.com), data[i])print(result.group())
# 输出123756786qq.com
# test139.com
# jdfasljsafa163.com一个括号是一个分组从左到右是分组1分组2一次类推通过result.group(索引)可以返回不同的值如下
print(result.group(0))
# 输出123756786qq.com
# test139.com
# jdfasljsafa163.comprint(result.group(2))
# 输出123756786
# test
# jdfasljsafaprint(result.group(2))
# 输出qq.com
# 139.com
# 163.com\num:这里的num就是分组的序号
python
假设我要提取网页标签中源代码例如html标签是html/html格式的
text htmlhello world/html
result1 re.match(\D*, text) # 输出htmlhello world/html
注 \D*匹配的内容为htmlhello world/html
result2 re.match(r(\w*)\w*\s\w*/\1, text) # 输出htmlhello world/html
注 /\1中的\1就是匹配的分组1中的\w*也就是html因为结尾也有html所以可以直接引用分组1中的内容
result3 re.match((\w*)\w*\s\w*/\\1, text) # 输出htmlhello world/html
注 因为没有使用result2中的r模式所以要防止\1转义因此为\\1但效果一样
print(result3.group())(?P别名):分组起别名 (?P别名):引用别名name匹配分组字符串
python
以之前的列子为基础进行修改取别名?Pname1引用别名?Pname1结果如下不变
text htmlhello world/html
result1 re.match((?Pname1\w*)\w*\s\w*/(?Pname1), text) # 输出htmlhello world/html函数
1.re.match(pattern, string) 功能从字符串起始位置匹配正则表达式。 特点仅检查字符串开头若开头不匹配则返回 None。 等效于正则表达式以 ^ 开头。
python
示例
re.match(rabc, abc123) # 匹配成功
re.match(rabc, 123abc) # 匹配失败re.search(pattern, string) 功能在整个字符串中搜索第一个匹配项。 特点不限制匹配位置找到第一个匹配即返回。 即使字符串中间或结尾有匹配也会成功。
示例
re.search(rabc, 123abc456) # 找到 abcre.findall(pattern, string) 功能返回所有非重叠匹配项的列表。 特点无分组时返回所有完整匹配的字符串列表。 有分组时返回分组内容的元组列表。
示例
re.findall(r\d, 12 apples, 34 bananas) # [12, 34]
re.findall(r(\d)(\w), 1a 2b) # [(1, a), (2, b)]re.sub(pattern, repl, string) 功能替换所有匹配项为指定内容。 特点repl 可以是字符串或函数动态生成替换内容。 支持反向引用如 \1 或 \g1。
示例
re.sub(r\d, NUM, a1b2) # aNUMbNUM
re.sub(r(\d{4})-(\d{2}), r\2/\1, 2023-10) # 10/2023re.split(pattern, string) 功能按正则表达式分割字符串。 特点若正则含分组分隔符会保留在结果中。 支持复杂分隔符如多字符或模式。
示例
re.split(r\d, a1b22c) # [a, b, c]
re.split(r(\d), a1b22c) # [a, 1, b, 22, c]练习
练习题 初级题目
提取所有数字
从字符串 abc123def456ghi789 中提取所有连续数字结果应为 [123, 456, 789]。匹配邮箱地址
从文本 联系我userexample.com 或 admintest.org 中提取所有邮箱地址结果应为 [userexample.com, admintest.org]。验证日期格式
检查字符串 2023-10-05 是否符合 YYYY-MM-DD 格式年范围 1900-2099月 01-12日 01-31。
str abc123def456ghi789
result re.findall(r\d, str)
print(result)
str2 联系我userexample.com 或 admintest.org
result2 re.findall(r\b[\w.][\w.]\.\w\b, str2)
print(result2)
str3 2023-10-30
result3 re.match(r^(19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$, str3)
print(result3.group())中级题目
提取带区号的电话号码
从 电话(021)123-4567 或 022-87654321 中提取所有电话号码包括括号和短横线结果应为 [(021)123-4567, 022-87654321]。匹配 HTML 标签内容
从 div classtitleHello World/div 中提取标签内的内容 Hello World不包含标签本身。分割混合数据
将字符串 apple, banana; cherry|orange 按 , ; | 或空格分割成列表结果为 [apple, banana, cherry, orange]。str4 电话(021)123-4567 或 022-87654321
result4 re.findall(r\(\d{3}\)\d-\d|\d{3}-\d, str4)
print(result4)
str5 div classtitleHello World/div
result5 re.sub(r[\D]?, , str5)
print(result5)
str6 apple, banana; cherry|orange
result6 re.split(r[, ;|], str6)
print(result6)高级题目
排除特定模式
从文本 error: 404, warn: 302, info: 200 OK 中提取所有非错误状态码即排除 error 后的数字结果为 [302, 200]。匹配嵌套 JSON 键值
从简化 JSON 片段 {\name\: \John\, \age\: 30, \city\: \New York\} 中提取所有键值对结果为 [name, John, age, 30, city, New York]。复杂日期时间提取
从日志 [2023-10-05 14:30:00] ERROR: System failure 中提取日期和时间结果为 [2023-10-05, 14:30:00]。str7 error: 404, warn: 302, info: 200 OK
result7 re.findall(r[0-35][0-9][0-9], str7)
print(result7)
json_str {\name\: \John\, \age\: 30, \city\: \New York\}
result re.findall(r(\w):\s*([^])|(\w):\s*(\d), json_str)
print(result)
# 合并结果并过滤空值
clean_result [tuple(filter(None, item)) for item in result]
print(clean_result)
str9 [2023-10-05 14:30:00] ERROR: System failure
result9 re.findall(r\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}, str9)
print(result9)
str10 https://example.com/search?qpythonpage2sortdesc
result11 re.findall(r[?][\w][\w], str10)
result12 re.findall(r[^?][^], str10)
result13 re.findall(r([^?])([^]), str10)
print(result11)
print(result12)
print(result13)