1 基础使用
(一)
程序如下,
#==============更多关于正则表达式的信息,可以参考Python官方文档:https://docs.python.org/3/library/re.html
import re
line = "replace sdlink froms. sdlinkid = 1526093896, before = , after = 1527148286,1526469937,1542948896,1542962446,1586022115,1526200502"
pattern = r"sdlink (.*). sdlinkid = (.*), before = (.*), after = (.*)"
match = re.search(pattern, line)
if match:
datatype = str(match.group(1))
sdlinkid = int(match.group(2))
before = str(match.group(3))
after = str(match.group(4))
print("type:", datatype)
print("sdlinkid:", sdlinkid)
print("before:", before)
print("after:", after)
输出如下,
type: froms
sdlinkid: 1526093896
before:
after: 1527148286,1526469937,1542948896,1542962446,1586022115,1526200502
(二)
.
:表示匹配除换行符以外的任意字符。
?
:表示匹配前面字符0次或者1次。例如ab*
表示匹配a
和ab
。
*
:表示匹配前面字符0次或者多次。例如ab*
表示匹配a
、ab
、abb
、abbb
……
$
:表示匹配以某个字符串结尾的字符串。例如abc$
表示匹配以abc
结尾的字符串,像abc
、1abc
、2abc
、defabc
等等。
\.
:表示匹配.。例如a\.a
表示匹配a.a
。
\?
:表示匹配?。例如a\?a
表示匹配a?a
。
\*
:表示匹配*。例如a\*a
表示匹配a*a
。
(三)
正则表达式在线测试
2 训练
示例1:
import os
import time
import collections
import re
def get_num_seq_from_log(log_file: str) -> list:
pattern1 = r"elements_max_seq\.size\(\) = (.*)"
pattern2 = r"str_seq = (.*)"
res = []
with open(file_path, "r", encoding='utf-8') as f: #打开文本
#data = f.read() #读取文本
lines = f.readlines()
for line in lines:
match = re.search(pattern1, line)
if match:
ele_size = int(match.group(1))
#print(f"ele_size = {ele_size}")
res.append(ele_size)
match = re.search(pattern2, line)
if match:
laneid_seq = str(match.group(1))
#print(f"laneid_seq = {laneid_seq}")
res.append(laneid_seq)
break
#print(f"ele_size = {ele_size}, laneid_seq = {laneid_seq}")
return res
start_t = time.time()
dir_path = "F:\\2shuju\\82406_had2bd_log"
file_path = "F:\\2shuju\\82406_had2bd_log\\【XX】24Q1_gcj02_10108_20240412_1517_110000_XX\\CG_2024Q1CPSJJF0307_quanguodongtaimukuV1_20240307_110000_had2bd_1712908579___1712918524_oKUUNdIo.log"
ele_size, laneid_seq = get_num_seq_from_log(file_path)
print(f"ele_size = {ele_size}, laneid_seq = {laneid_seq}")
end_t = time.time()
print(f"程序成功执行,用时{(end_t - start_t) / 60.0}分钟!")