python - 如何在 Python 中创建包含常规变量和一些固定文本的正则表达式?

标签 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+)("+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 在分解我的正则表达式方面比我以前做得更好:

Link cuz i have no rep

关于python - 如何在 Python 中创建包含常规变量和一些固定文本的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938058/

相关文章:

python - 使用颜色条在绘图中设置相等的纵横比

php - 从格式为 "DD MMM YYYY"的字符串中提取日期

regex - 使用正则表达式查找和替换字符串中可变数量的项目

python - 按Python字典中的嵌套字典排序

python - 将 Scipy minimize (scipy.optimize.minimize) 与大型等式约束矩阵结合使用

python - 为 tweepy 设置超时

python - 类型错误 : worker() takes 0 positional arguments but 1 was given

python - 来自 pandas Dataframe 的具有不确定性的 LaTeX 表

Python Django Admin Clean() 方法不覆盖值

java - 相同的正则表达式在 Java 和 Python 中具有不同的结果