Fork me on GitHub

正则-- | 匹配分组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# ### 正则表达式
import re
"""
# 1.正常分组 ()
1) 正常情况下用()圆括号进行分组 可以用\1 反向引用第一个圆括号匹配的内容。
2) (?:正则表达式) 表示取消优先显示的功能
 
 
(正则表达式)    代表分组 findall 把所有分组的内容显示到列表里
(?:正则表达式)  代表分组 findall 把所有分组的内容不显示到列表里
"""
print(re.findall('.*?_good','wusir_good alex_good 神秘男孩_good'))
#['wusir_good', ' alex_good', ' 神秘男孩_good']
print(re.findall('(.*?)_good','wusir_good alex_good 神秘男孩_good'))
#['wusir', ' alex', ' secret男']
print(re.findall('(?:.*?)_good','wusir_good alex_good 神秘男孩_good'))
 
# | 代表或
# 既想匹配abc 还要匹配abcd
lst = re.findall("abc|abcd","abc234abcd234")
print(lst) # 有缺陷,不能够都匹配到
#任意 把字符串长的写在前面,字符串短的写在后面
lst = re.findall("abcd|abc","abc234abcd234")
print(lst)
 
# 匹配小数
'''
用\让原本有意义的字符变得无意义.
. 代表任意字符(除了\n)
如果想要让正则匹配一个.
用\. 让点的意思失效.
'''
# 3.14 34. .2342 234. . 2344.234
lst = re.findall("\d+\.\d+","3.14 34. .2342 234. . 2344.234")
print(lst)
# 匹配小数和整数
lst = re.findall("\d+\.\d+|\d+","3.14 34. .2342 234. . 2344.234 343 sdfsdf ")
print(lst)
print("------112221------")
# 使用分组的形式来匹配小数和整数
lst = re.findall("\d+(\.\d+)?","3.14 34. .2342 234. . 2344.234 343 sdfsdf ")
print(lst)
print("------111------")
lst = re.findall("\d+(?:\.\d+)?","3.14 34. .2342 234. . 2344.234 343 sdfsdf ")
print(lst)
 
# 匹配135或171的手机号
lst = re.findall("135|^171\d{8}","171skdjfksjkf 11312312317178787887")
print(lst)
print("------------")
lst = re.findall("135|171[0-9]{8}","171skdjfksjkf 17178787887")
print(lst)
 
# ### search   通过正则匹配出第一个对象返回,通过group取出对象中的值
"""
findall  把满足条件的所有值都找出来放到列表里面返回
search   找到一个满足条件的值就直接返回,扔到一个对象当中
想要获取对象中的值,用group 对象.group()
"""
obj = re.search("\d+","jsdfusudf8989sdfsdf89")
print(obj)
res = obj.group()
print(res)
 
 
# 匹配www.baidu.com 或者 www.oldboy.com
obj = re.search("(www)\.(baidu|oldboy)\.(com)","www.baidu.com www.oldboy.com")
res = obj.group()
print(res)
# 数字1 代表拿第一个小括号里面的内容
res = obj.group(1)
print(res)
# 数字2 代表拿第一个小括号里面的内容
res = obj.group(2)
print(res)
# 数字3 代表拿第一个小括号里面的内容
res = obj.group(3)
print(res)
 
# groups 一次性把所有小括号里面的内容匹配出来
res = obj.groups()
print(res)
 
 
 
# "5*6-7/3" 匹配 5*6 或者 7/3
strvar = "5*6-7/3"
obj = re.search("\d+[*/]\d+",strvar)
res = obj.group()
print(res)
 
lst = re.findall("\d+[*/]\d+",strvar)
print(lst)

  

posted @   MR_黄Python之路  阅读(445)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
点击右上角即可分享
微信分享提示