_VALUE
我正在解析 C 源文件。我想匹配所有以 , ... , 结尾但不以CANA_
, CANB_
... ,开头的变量(蛇形大小写格式)CANF_
。我需要匹配整个变量名以便稍后替换。
这是我目前使用的 python 设置
import re
def signal_ending_VALUE_updater(match: re.Match) -> str:
groups = match.groupdict()
return some_operation_on(group["SIGNAL_NAME"])
REGEX=r"(?<!CAN[A-F]_)\b(?P<SIGNAL_NAME>\w+_VALUE)\b"
with open(file_path,'r') as f:
content = f.read()
content_new = re.sub(REGEX,signal_ending_VALUE_updater,content)
不幸的是,这个正则表达式并不总是有效,例如如果我们尝试这个 testacase
test=" shared->option.mem = ((canAGetScuHmiVehReqLiftModBtnSt() == CANA_SCU_HMI_VEH_REQ_LIFT_MOD_BTN_ST_PRESSED_VALUE) ||"
re.find(REGEX,test)
CANA_SCU_HMI...
将返回我不想匹配的变量 ( )。我在正则表达式中没有考虑到什么?
正则表达式背后的想法是:
(?<!CAN[A-F]_)
:使用负向后视确保匹配不以 CAN 开头,后跟字母 A、B、C、D、E 或 F 之一以及下划线 (_)。\b
:单词边界,确保我们匹配的是整个单词,而不是单词的一部分(?P<SIGNAL_NAME>\w+_VALUE)
:(?P<SIGNAL_NAME>...)
:组队比赛同名SIGNAL_NAME
\w
[a-zA-Z0-9_]
与将匹配蛇形命名变量名相同+
确保之前有一个或多个_VALUE
与变量名末尾的文字字符串 _VALUE 匹配。
\b
这又是一个词边界,确保匹配在变量名之后立即结束。