re 正则匹配 文本 特定内容

简介: re 正则匹配 文本 特定内容

两个不错的正则

从评论中匹配 硬件 信息

使用时,请把 r""" text “”" 中的 空格删掉

我只是为了看着清晰 才将正则表达式进行了 展开

p = re.compile(r"""
(
    (显卡ID[((]数量[))]:\s*(?P<gpu_info>[0-9a-zA-Z:(),]+))|
    (内存总数:\s*(?P<memory_GB>[0-9]+)\s*GB)|
    (cpu线程数:\s*(?P<cpu_type>[0-9a-zA-Z]+)\s*(?P<cpu_count>[0-9]+))|
    (.)
)+"""
,re.DOTALL)

从 conf 中匹配 硬件 信息

p = re.compile(r"""
(
    (hostid\s*=\s*(?P<hostid>[0-9a-zA-Z]{30,}))|
    (ip\s*=\s*(?P<ip>[0-9a-zA-Z:.]+))|
    (video_id\s*=\s*(?P<gpu_info>[0-9a-zA-Z:()(),]+))|
    (cpu\s*=\s*(?P<cpu_type>[0-9a-zA-Z]+)\s*(?P<cpu_count>[0-9]+))|
    (time\s*=\s*(?P<time>[0-9-/.]+))|
    (memory\s*=\s*(?P<memory_GB>[0-9]+)\s*GB)|
    (machine_code\s*=\s*(?P<machine_code>[0-9a-zA-Z]{30,}))|
    (.)
)+"""
,re.DOTALL)

re group使用

import re
def test():
    #               gpu_type  gpu_count    memory_GB   cpu_type  cpu_count
    in_s = " 显卡ID(数量):10de:1f82(1) 内存总数:128 GB cpu线程数:AMD 64 "
    # patten1 = re.compile("""显卡ID\(数量\):(?P<gpuid>[0-9a-zA-Z:() ]+)""")
    patten1 = re.compile("""显卡ID\(数量\):[ ]*(?P<gpu_type>[0-9a-zA-Z:]+)\((?P<gpu_count>[0-9]+)\)[ ]*内存总数:[ ]*(?P<memory_GB>[0-9]+)[ ]*GB[ ]*cpu线程数:[ ]*(?P<cpu_type>[0-9a-zA-Z]+)[ ]*(?P<cpu_count>[0-9]+)""")
    res = patten1.search(in_s)
    print(res)
    print("gpu_type",res.group('gpu_type'))
    print("gpu_count",res.group('gpu_count'))
    print("memory_GB",res.group('memory_GB'))
    print("cpu_type",res.group('cpu_type'))
    print("cpu_count",res.group('cpu_count'))
    print("\nres groups ", res.groups() ) 
    print("\nres groupdict ", res.groupdict() ) 
    print("\nfindall\n")
    res = patten1.findall(in_s)
    print(res)
if __name__ == "__main__":
    test()

oputput

<_sre.SRE_Match object; span=(1, 48), match='显卡ID(数量):10de:1f82(1) 内存总数:128 GB cpu线程数:AMD 64'>
gpu_type 10de:1f82
gpu_count 1
memory_GB 128
cpu_type AMD
cpu_count 64
res groups  ('10de:1f82', '1', '128', 'AMD', '64')
res groupdict  {'gpu_type': '10de:1f82', 'gpu_count': '1', 'memory_GB': '128', 'cpu_type': 'AMD', 'cpu_count': '64'}
findall
[('10de:1f82', '1', '128', 'AMD', '64')]

re.group 使用

patten1 = re.compile("""显卡ID\(数量\):(?P<gpuid>[0-9a-zA-Z:() ]+)内存总数:(?P<memoryinfo>[0-9a-zA-Z:() ]+)cpu线程数:(?P<cpuinfo>[0-9a-zA-Z:() ]+)""")
res = patten1.search(in_s)
print(res)
print("gpu_type",res.group('gpuid'))

output

lmk@DESKTOP-1VJBA5P:~/codes/py/study_re$ python3 qoute.py 
<_sre.SRE_Match object; span=(1, 49), match='显卡ID(数量):10de:1f82(1) 内存总数:128 GB cpu线程数:AMD 64 '>
gpuid 10de:1f82(1) 
memoryinfo 128 GB 
cpuinfo AMD 64 
findall
[('10de:1f82(1) ', '128 GB ', 'AMD 64 ')]

findall使用

res = patten1.findall(in_s)
    print(res)

正则匹配 文本 特定内容

import re
def test():
    #               gpu_type  gpu_count    memory_GB   cpu_type  cpu_count
    in_s = " 显卡ID(数量):10de:1f82(1) 内存总数:128 GB cpu线程数:AMD 64 "
    # patten1 = re.compile("""显卡ID\(数量\):(?P<gpuid>[0-9a-zA-Z:() ]+)""")
    patten1 = re.compile("""显卡ID\(数量\):(?P<gpuid>[0-9a-zA-Z:() ]+)内存总数:(?P<memoryinfo>[0-9a-zA-Z:() ]+)cpu线程数:(?P<cpuinfo>[0-9a-zA-Z:() ]+)""")
    res = patten1.search(in_s)
    print(res)
    print("gpu_type",res.group('gpuid'))
    print("gpu_count",res.group('gpuid'))
    print("memory_GB",res.group('memoryinfo'))
    print("cpu_type",res.group('cpuinfo'))
    print("cpu_type",res.group('cpuinfo'))
    print("\nfindall\n")
    res = patten1.findall(in_s)
    print(res)
if __name__ == "__main__":
    test()
相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
缓存 JavaScript 前端开发
JavaScript中DOM操作:新手常犯错误与避免策略
【4月更文挑战第1天】本文介绍了JavaScript中DOM操作的基础和新手常犯错误,包括频繁查询DOM、不恰当的遍历、滥用innerHTML、忽视异步与DOM状态以及过度同步更新。建议包括缓存DOM引用、注意文本节点、慎用innerHTML以防止XSS、正确处理异步和批量更新。遵循最佳实践,开发者能提升代码质量和应用性能。
598 2
|
11月前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
487 75
|
域名解析 监控 安全
比宝塔面板更好用的部署软件工具面世了
本文对比了宝塔面板与新兴部署软件Websoft9,介绍了Websoft9在部署开源应用时的独特优势,如丰富的即用型模板、简便的安装配置流程、支持泛域名解析及高效的安全性措施,适合不同技术水平的用户使用。
比宝塔面板更好用的部署软件工具面世了
|
存储 消息中间件 运维
分层存储救不了Kafka
Apache Kafka,作为流处理领域的标杆,面临云环境下的挑战,如高存储成本、运维复杂性和性能瓶颈。传统的本地磁盘Shared Nothing架构导致这些问题,而分层存储仅部分缓解,未根本解决问题。直接写入S3虽降低成本,但牺牲了延迟。为解决这些痛点,提出了创新的共享存储架构,通过EBS+S3实现存算分离,保持低延迟并提高弹性,同时降低成本和运维复杂性。该架构将EBS视为共享存储,实现Broker与存储的解耦,确保在云时代引领流处理系统的发展。
402 3
分层存储救不了Kafka
|
数据采集 XML 程序员
揭秘YouTube视频世界:利用Python和Beautiful Soup的独特技术
本文介绍了如何使用Python和Beautiful Soup库抓取YouTube视频数据,包括标题、观看次数和点赞、踩的数量。通过亿牛云爬虫代理IP服务避免被网站屏蔽,提供代理服务器配置和请求头设置示例。代码可能需根据YouTube页面更新进行调整。
809 0
揭秘YouTube视频世界:利用Python和Beautiful Soup的独特技术
|
弹性计算 负载均衡 Cloud Native
阿里云负载均衡SLB版本CLB、ALB和NLB有什么区别如何选择?
最初阿里云只有一种传统的负载均衡SLB,这款SLB实例是四层负载均衡;后来在传统的SLB基础上推出七层负载均衡ALB,原四层SLB改名为CLB;后来又推出基于NFV虚拟化平台,支持弹性伸缩的网络型负载均衡NLB
10565 24
阿里云负载均衡SLB版本CLB、ALB和NLB有什么区别如何选择?
|
缓存 运维 前端开发
亿级流量电商详情页系统实战:缓存架构+高可用服务架构+微服务架构
亿级流量电商详情页系统的完整大型架构。同时最重要的是,在完全真实的大型电商详情页系统架构下,全流程实战了整套微服务架构,包含了基于领域驱动设计进行微服务建模、Spring Cloud、基于DevOps的持续交付流水线与自动化测试套件、基于Docker的自动化部署。此外,还包含了大型电商详情页系统架构中的多种复杂架构设计的详细介绍。
717 0
如何避免新代码变包袱?阿里通用方法来了!
阿里妹导读:什么是设计?什么是架构?从零开始建立一个新的系统,新写的每行代码都可能成为明天的历史包袱?如何能有效的在遗留代码上工作?今天,阿里资深技术专家辉子为我们带来NBF框架下软件工程架构设计通用方法论,值得细细品读。
2708 0
|
数据挖掘
MATLAB利用散点进行函数曲线拟合
原文:MATLAB利用散点进行函数曲线拟合 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laobai1015/article/details/77537145 Matlab是一个很强大的数据处理软件,是人们进行数据分析的得力助手。
3914 0
|
Windows 安全 API
Chromium中跨进程文件句柄传递
实现说明 在Chromium跨进程架构下,也会有Browser/Renderer两个进程对相同文件进行操作的需求。
1286 0

热门文章

最新文章