Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中创建带有正则变量和一些固定文本的正则表达式?_Python_Regex_Python 2.7_Pattern Matching_Findall - Fatal编程技术网

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

如何在Python中创建带有正则变量和一些固定文本的正则表达式?,python,regex,python-2.7,pattern-matching,findall,Python,Regex,Python 2.7,Pattern Matching,Findall,在代码中,我只想从if条件中使用的c文件中获取变量名。 以下是正则表达式的代码片段: fieldMatch = re.findall(itemFieldList[i]+"=", codeline, re.IGNORECASE); 在这里,我可以从文件中找到变量itemFieldList[i]。 但当我尝试添加if时,如下所示,即使if条件下的c代码中存在变量,也不会提取任何内容作为输出 fieldMatch = re.findall(("^(\w+)if+[(](\w+)("+itemFiel

在代码中,我只想从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") 


这里的itemFieldList[i]=WORK.env_flow_ind

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

这是关于向正则表达式中添加变量的,然后你应该使用字符串模板,使我们和你未来的自己更容易理解

"^{}".format(variable)
这样做将允许您创建一个搜索所需内容的动态正则表达式

其次,我认为这不是你的问题。我认为你的正则表达式格式不正确。我不知道你到底想搜索什么,但我建议你阅读并在资源上测试你的正则表达式,比如确保你捕获了你想要的。从我看到的情况来看,您对组有点困惑。当你在一个模式周围加上括号时,你就把它标识为一个组。在搜索中,您试图用方括号将括号括起来以排除括号,这是正确的做法,但转义括号更简单、更清晰

如果您试图捕获此语句:

if(someCondition == fries)
要提取关键字fries,该模式的有效语法为:

(?=if\((?:[\w=\s])+(fries)\))
因为您希望这是动态的,所以可以用字符串模板替换字符串fries,您将得到类似以下内容的代码:

p = re.compile("(?=if\((?:[\w=\s])+({})\))".format(search), re.IGNORECASE)
p.findall(string)
Regex101在分解我的regex方面比我以前做得更好:


您可以将regex模式构建为:

pattern = r"\bif\b\s*\(.*?\b" + re.escape(variablename) + r"\b"
这将查找小写的单词“if”,然后是任意空格,然后是左括号,然后是任意字符,然后是搜索词,它的开头和结尾在单词边界处

因此,如果variablename是“WORK.env\u flow\u ind”,那么
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")

当未提取任何内容时,表示您的模式不存在于文件中,或者regex未正确写入。您应该在问题中添加一个示例输入。显示您的输入数据并描述您想要匹配的内容<代码>“^(\w+)如果+[{](\w+)(“+itemFieldList[i]+”)”)对我来说不合理。添加了有问题的示例输入。该正则表达式将与该字符串不匹配。例如,
f+
意味着什么?匹配空格的部分在哪里?圆括号?点?谢谢!它有帮助..更新的正则表达式:ifpattern=“\bif\b\s*(.*{0}=.*)。格式(itemFieldList[i]);谢谢!能够使用regex:ifpattern=“\bif\b\s*(.*?{0}=.*?)”获取字符串。格式(itemFieldList[i]);
if (WORK.env_bla == "c")
if (WORK.env_flow_id2 == "d")