Python正则表达式(或表达式)

时间:2013-10-22 06:02:22

标签: python regex optimization

我是Python的初学者,所以我对代码优化有疑问。我希望你能就此提出建议。 我正在解决下一个任务: 一行中有一个关键字的文本及其状态可能不同,例如:

... task1 .... success....
... task1 .... failed...
... task1 .... inactive...

我必须使用关键字跟踪此状态(我们还有不同的任务)。

我的代码:


list_of_tasks = ['task1','task2','task3']
list_of_states = ['success','inactive','failed']

for task in list_of_tasks:
 regex='|'.join(('.*'+task+'.*'+state+'.*') for state in list_of_states)
 pattern = re.compile (regex)
 for line in text:
     m = re.match(pattern,str(line))
     if m:
          #operational logic

这个正则表达式能否以更有效的方式完成? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您也可以轮换任务,因此最终的正则表达式看起来像

(task1|task2|task3).*(success|inactive|failed)

因此您拥有一个正则表达式,并且您可以通过m.group(1)获取任务名称,通过m.group(2)获取状态,但更重要的是 - 如果您的文件实际上只是表格中的一堆行

TASK STATUS

使用正则表达式是完全冗余的,您可以简单地将字符串拆分为白色字符并检索TASK和STATUS。只有在看起来像

时,正则表达才有用
so I did research on TASK statistics 123 $ time 30s process& STATUS leads to a conclusion that blah