2013-08-16 2 views

답변

2

사용 regex : -

파일 A (ASCII)>

 @ExtendedAttr = nvp_add(@ExtendedAttr, "severity", $severity, 
"description", $description, "eventID", $eventID, 
      "eventURL", $eventURL, "alertLevel", $alertLevel, 
     "eventStart", $eventStart, 
      "eventSourceCount", $eventSourceCount, "eventSourceTable", 
$eventSourceTable, "eventDestCount", $eventDestCount) 

나는 출력 (모든 새로운 라인)과 같이되고 싶어

>>> import re 
>>> with open('filename') as f: 
...  ans = [] 
...  for line in f: 
...   matches = re.findall(r'(?<!\w)(\$\w+)', line) 
...   ans.extend(matches) 
...   
>>> print ans 
['$severity', '$description', '$eventID', '$eventURL', '$alertLevel', '$eventStart', '$eventSourceCount', '$eventSourceTable', '$eventDestCount'] 

이제 예상 출력을 얻으려면 str.join을 사용하십시오.

>>> print "\n".join(ans) 
$severity 
$description 
$eventID 
$eventURL 
$alertLevel 
$eventStart 
$eventSourceCount 
$eventSourceTable 
$eventDestCount 
+0

(또한 가독성이 강화의 또 다른 라인에 추출 할 수있는) f.read()로 한 번에 전체 파일을 읽고 난 다음과 같은 텍스트가있는 경우 : – user2671444

0

$ (대개 라인 엔드)의 이스케이프 처리가 \ 인 정규식을 사용하십시오.

import re 

with open("filename", "r") as f: 
...  matches = re.findall("(\$\w+)", f.read()) 
print matches 
+0

이것은 또한 ''foo는 $의 bar'' 전체를 읽는 일치합니다 파일은 보통 좋은 생각이 아닙니다. –

관련 문제