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

如何用正则表达式识别C文件中umsg_前缀的函数调用?

修正正则表达式匹配C文件中的umsg格式函数调用

需求:解析C源文件,找出所有符合umsg_xxxxx_yyyy_zzz(aaa,bbb,ccc,ddd)格式的函数调用,示例如下:

umsg_test_uints_subscribe(1,1)
umsg_sensors_imu_receive(sub,&msg,portMAX_DELAY)
umsg_sensors_imu_publish(&imu_data);
umsg_sensors_imu_peek(&peek_msg);

原代码问题:使用的正则umsg_[a-z]+\(.*\)无法匹配目标内容,核心问题有两个:

  1. [a-z]+仅匹配连续小写字母,无法适配函数名中用于分隔的下划线(比如umsg_sensors_imu_receive里的多段下划线命名)
  2. .*是贪婪匹配规则,会从左括号开始一直匹配到行尾的最后一个右括号,可能包含无关内容,若行内有多个函数调用还会出现匹配错误

修正后的代码:

import re

file_path = "你的C文件路径.c"
with open(file_path, 'r') as f:
    for line in f:
        # 提取所有符合格式的函数调用
        matches = re.findall(r'umsg_[a-z_]+\([^)]*\)', line)
        if matches:
            for match in matches:
                print(match)

正则表达式说明:

  • umsg_:匹配固定前缀
  • [a-z_]+:匹配由小写字母和下划线组成的函数名部分,支持多段下划线分隔的命名规则
  • \(:转义匹配左括号(正则中括号属于特殊语法字符,需转义)
  • [^)]*:匹配任意非右括号的字符,精准锁定括号内的参数内容,避免贪婪匹配带来的冗余
  • \):转义匹配右括号

如果需要保留整行内容而非仅提取函数调用,可调整为:

import re

file_path = "你的C文件路径.c"
with open(file_path, 'r') as f:
    for line in f:
        if re.search(r'umsg_[a-z_]+\([^)]*\)', line):
            print(line.strip())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:20:21