在代码中,我只想从 if 条件中使用的 c 文件中获取变量名称。 以下是正则表达式的代码片段:
fieldMatch = re.findall(itemFieldList[i]+"=", codeline, re.IGNORECASE);
在这里我可以从文件中找到变量itemFieldList[i]。
但是,当我尝试添加 if
时,如下所示,即使 if 条件下的 C 代码中存在变量,也不会提取任何内容作为输出。
fieldMatch = re.findall(("^(\w+)if+[(](\w+)("+itemFieldList[i]+")="), codeline, re.IGNORECASE|re.MULTILINE);
任何人都可以建议我们如何创建正则表达式来获取提到的场景。
示例输入:
IF(WORK.env_flow_ind=="R")
或者
IF( WORK.qa_flow_ind=="Q" OR WORK.env_flow_ind=="R")
此处 itemFieldList[i] = WORK.env_flow_ind
最佳答案
我没有足够的声誉来发表评论,这是应该的,而且我不能说我完全理解这个问题。但要指出几点:
这是关于向您的正则表达式添加变量,那么您应该使用字符串模板来使其对我们和您 future 的自己更容易理解。
"^{}".format(variable)
这样做将允许您创建一个动态正则表达式来搜索您想要的内容。
其次,我认为这不是你的问题。我认为你的正则表达式格式错误。我不知道您到底想搜索什么,但我建议阅读 python regex documentation并在类似 regex101 的资源上测试您的正则表达式以确保您捕获了您想要捕获的内容。据我所知,您对组有点困惑。当您在模式两边加上括号时,您将其识别为一个组。您尝试通过用方括号括起来来排除搜索中的括号,这是正确的做法,但转义它们更简单、更干净。
如果您试图捕获此语句:
if(someCondition == fries)
并且您想要提取关键字 fries,该模式的有效语法是:
(?=if\((?:[\w=\s])+(fries)\))
由于您希望它是动态的,因此您可以将字符串 fries 替换为您的字符串模板,您将得到如下所示的代码:
p = re.compile("(?=if\((?:[\w=\s])+({})\))".format(search), re.IGNORECASE)
p.findall(string)
Regex101 在分解我的正则表达式方面比我以前做得更好:
关于python - 如何在 Python 中创建包含常规变量和一些固定文本的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938058/