You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用re.findall匹配字符串中1位或2位数字的COM端口?

解决COM端口1位/2位数字的正则匹配问题

你之前的正则写法存在两个核心问题:

  • r'COM[0-9][0-9]'强制要求匹配两位数字,导致单数字的COM端口(比如COM4)被遗漏;
  • r'COM[0-99]'是错误的字符组用法,字符组内的[0-99]等价于[0-9],只能匹配一位数字,自然抓不到COM12这类两位的端口。

正确的正则表达式

使用r'COM\d{1,2}'或者r'COM[0-9]{1,2}',其中{1,2}表示匹配前面的数字1次或2次,刚好覆盖你需要的COM4到COM99的范围。

修改后的代码片段

import re
import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())
for p in ports:
    print(p.description)
    if 'Serial Device' in p.description:
        find_com = re.findall(r'COM\d{1,2}', p.description)
        if find_com:
            # 取第一个匹配到的有效端口
            target_port = find_com[0]
            print(f"找到目标串口: {target_port}")
            # 此处添加后续串口连接、数据接收逻辑

更可靠的替代方案

其实serial.tools.list_ports返回的ListPortInfo对象自带name属性,直接就是端口名(比如'COM4'),完全不需要从description里正则提取,这个方法更稳定,能避免不同设备description格式不一致导致的匹配失败:

import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())
for p in ports:
    print(f"描述: {p.description}, 端口名: {p.name}")
    if 'Serial Device' in p.description:
        target_port = p.name
        print(f"找到目标串口: {target_port}")
        # 后续逻辑写在这里

内容的提问来源于stack exchange,提问作者Naj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:55:02