正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
python正则表达式的使用(实验代码),具体代码如下所示:
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
|
import re
data = '''12345 2019-05-20 13:30:04,102 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:zscore.keys{compared=week,redis=6380,endpoint=192.168.8.11_Redis-b}
2019-05-20 13:30:04,133 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:keys{redis=6380,endpoint=192.168.8.120_Redis-sac-a}
'''
# 1.1)非编译正则表达式的使用
def re_nocompile():
pattern = "report" #匹配时间格式
r = re.findall(pattern,data,flags = re.IGNORECASE) # findall方法 返回字符串
print (r)
# 1.2) 编译的正则表达式的使用(效率高)
def re_compile():
pattern = "[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}" # 匹配时间格式
re_obj = re. compile (pattern) #创建一个对象
r = re_obj.findall(data) # findall方法 返回字符串
print (r)
# 2.1)“匹配” 类函数的使用 findall、 match、search、finditer
def re_match():
pattern = "\d+" # 匹配数字
r = re.match(pattern,data) #match 函数是匹配字符串的开头,类似startwith
if r: # 使用match匹配成功后,返回SRE_MATCH类型的对象,该对象包含了相关模式和原始字符串,包括起始位置和结束位置
print (r)
print (r.start())
print (r.end())
print (r.string)
print (r.group()) # group()用来提出分组截获的字符串。group() 同group(0)就是匹配正则表达式整体结果。
# group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
# 当然正则表达式中没有括号,group(1)肯定不对了
print (r.re)
else : # match如果匹配不到,返回None
print ( "False" )
def re_search():
pattern = "[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}" # 匹配时间格式
r = re.search(pattern,data) # search方法是全部位置的匹配,返回SRE_MATCH对象
print (r)
print (r.start()) #起始位置
print (r.end()) #结束位置
# finditer返回一个迭代器
def re_finditer():
pattern = "\d+" # 匹配数字
r = re.finditer(pattern,data)
for i in r:
print (i.group())
# 贪婪匹配:总是匹配最长的那个字符串(默认)
# 非贪婪匹配:总是匹配最短的那个字符串(在匹配字符串时加上?来实现)
def re_find02():
r1 = re.findall( "Python.*\." ,data) # 贪婪匹配
print (r1)
r2 = re.findall( "Python.*?\." , data) #非贪婪匹配
print (r2)
if __name__ = = "__main__" :
re_nocompile()
re_compile()
re_match()
re_search()
re_finditer()
re_find02()
import re
import requests
data = '''12345 2019-05-20 13:30:04,102 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:zscore.keys{compared=week,redis=6380,endpoint=192.168.8.11_Redis-b}
2019-05-20 13:30:04,133 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:keys{redis=6380,endpoint=192.168.8.120_Redis-sac-a}
'''
# 1)“修改类”函数
# 1.1) sub函数进行匹配并替换,返回替换后的字符串
def re_sub():
pattern = "[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}" # 匹配时间格式
data01 = re.sub(pattern, "timeString" ,data)
print (data01)
# 1.2)splite将字符串拆成子串列表,可以同时指定多个分隔符
def re_split():
r = re.split(r "[:\-\=]" ,data.strip( "'" ))
print (r)
# 2)匹配html的一个例子
def re_html():
r = requests.get( "https://www.hao123.com/" )
print (r.content)
try :
web = re.findall( "(https:.*?.com)" , str (r.content))
print (web)
except Exception as err:
print (err)
if __name__ = = "__main__" :
re_sub()
re_split()
re_html()
|
总结
以上所述是小编给大家介绍的python正则表达式的使用(实验代码),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:https://blog.csdn.net/weixin_34202952/article/details/91140947