Regex检测单词是否包含小写ch

2024-04-23 06:40:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个正则表达式来确定C中宏声明的名称是否大写:

#define MY_MACRO

为了只检测大写单词(不考虑空格或连字符等特殊字符),我使用以下正则表达式:

^{pr2}$

如果我的宏是全大写的,它会起作用,但如果它是这样的,则会失败:

#define Mymacro

什么是正则表达式可以确定这种情况?在


Tags: 名称声明my情况字符单词macro空格
2条回答

正则表达式是否有来执行所有操作?您只需将所有#define与regex匹配,然后使用一些非常简单的Python代码测试宏名称的大写:

macro_defn = re.compile(r'#define\s+(\w+)')
for line in code_source:
    macro_match = macro_defn.match(line)
    if macro_match:
        macro_name = macro.group(1)
        if macro_name.upper() != macro_name:
            print line

要检测#define MixedCase但不匹配#define ALLUPPERCASE,您需要一个否定的前瞻断言:

r'#define\s+(?![A-Z_]+\b)[A-Za-z_]+\b'

\b与单词边界相匹配;一个单词结束的地方,可能是因为它后面有空格,或者是行尾。在

(?!..)否定的lookahead断言检查下一个单词是否全部大写,然后允许对混合大小写单词进行匹配。在

请注意,我在匹配字符类中也包含了_下划线。在

您可能需要在宏名称中包含数字,毕竟它们是合法的:

^{pr2}$

第二个字符类可以简化为\w,这与[A-Za-z0-9_]相同。在

相关问题 更多 >