如何在Python中创建带有正则变量和一些固定文本的regex?

2024-06-26 14:12:34 发布

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

在代码中,我只想从if条件中使用的c文件中获取变量名。 下面是regex的代码片段:

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);

有谁能建议我们如何创建regex来获取上述场景吗。你知道吗

样本输入:

IF(WORK.env_flow_ind=="R") 

或者

IF( WORK.qa_flow_ind=="Q" OR WORK.env_flow_ind=="R") 

此处itemFieldList[i]=工作环境流索引你知道吗


Tags: 代码reenvif条件flowregexwork
2条回答

您可以将regex模式构建为:

pattern = r"\bif\b\s*\(.*?\b" + re.escape(variablename) + r"\b"

这将查找小写的单词“if”,然后是任意空格,然后是左括号,然后是任意字符,然后是您的搜索词,它的开头和结尾在单词边界处。你知道吗

所以如果变量名是工作环境流索引,则re.findall(pattern, textfile)将匹配以下行:

if(blabla & WORK.env_flow_ind == "a")
if  (WORK.env_flow_id == "b")
if(WORK.env_flow_id == "b")
if( WORK.env_flow_id == "b")

这些不匹配:

if (WORK.env_bla == "c")
if (WORK.env_flow_id2 == "d")

我没有足够的声誉来评论这个问题,这是应该的,我不能说我完全理解这个问题。但要指出几点:

它是关于添加变量到你的正则表达式,然后你应该使用字符串模板,使我们和你未来的自我更容易理解。你知道吗

"^{}".format(variable)

这样做将允许您创建一个搜索所需内容的动态正则表达式。你知道吗

第二,我不认为这是你的问题。我认为你的正则表达式格式不正确。我不知道您到底想搜索什么,但我建议您阅读python regex documentation,并在regex101这样的资源上测试regex,以确保您捕获了您想要的内容。据我所知,您对组有点困惑。当你在一个模式周围加上括号时,你就把它标识为一个。在搜索过程中,您试图用方括号将圆括号括起来,从而排除圆括号,但这样做更简单、更简洁。你知道吗

如果您试图捕获此语句:

if(someCondition == fries)

如果要提取关键字fries,则该模式的有效语法为:

(?=if\((?:[\w=\s])+(fries)\))

因为您希望这是动态的,所以您可以用字符串模板替换字符串fries,您将得到这样的代码:

p = re.compile("(?=if\((?:[\w=\s])+({})\))".format(search), re.IGNORECASE)
p.findall(string)

Regex101在分解我的regex方面做得比以前更好:

Link cuz i have no rep

相关问题 更多 >