2013-10-22 3 views
0

는 파이썬에서 초보자, 그래서 나는 코드 최적화에 대한 의문을 가지고있다. 당신이 저에게 조언 해 주셨으면 좋겠습니다. 내가 다음 작업을 해결 해요 : 예를 들어 다를 수 있습니다 하나 개의 행의 키워드 상태, 텍스트,있다 :파이썬 정규식 (또는 식)

... 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 

이 정규식은보다 효율적인 방법으로 수행 할 수 있습니까? 미리 감사드립니다.

+0

작업과 상태는 무엇입니까? 그것은 다음과 같은 것입니까?''blah bla foo bar 동물원 task1 abc def 12345 cat dog 마이크 성공 "', 또는이게 맘에 드는가? task1 success"' –

답변

1

당신은 너무

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

같은 최종 정규식 모습은 그래서 당신은 정규식을 가지고 작업을 통해 대체도 수, 당신은 m.group(2)을 통해 m.group(1) 및 상태를 통해 작업 이름을 얻을 수 있습니다,하지만 더있다 중요 - 파일 양식의 행 실제로 단지 무리 정규 표현식에를 사용하여 완전히 중복, 당신은 단순히 흰색 문자에 문자열을 분할하고 검색 할 수 있습니다

TASK STATUS 

경우 작업 및 상태. Regexes는 마치 보이는 경우에만 유용합니다

so I did research on TASK statistics 123 $ time 30s process& STATUS leads to a conclusion that blah