2011-08-08 5 views
1

두 문자열 사이에있는 문자열을 추출하는 코드 조각이 있습니다. 그러나이 스크립트는 한 줄에서만이 작업을 수행합니다. 전체 파일에서이 작업을 수행하고 그 두 단어 사이에있는 모든 단어.파이썬에서 파일 작업

참고 : 두 단어는 fixed.For 예입니다 : 내 코드

'const int variablename=1' 

같은 인 경우, 내가 'int''=' 사이에 누워 파일에있는 모든 단어의 목록을 원한다. 파일이 편안하게 메모리에 들어가는 경우는 단일 정규식 호출이를 얻을 수

s='const int variablename = 1' 

k=s[s.find('int')+4:s.find('=')] 

print k 
+0

'int'와'='사이에는 정확히 무엇이 허용됩니까? –

답변

2
with open(filename) as fn: 
    for row in fn: 
     # do something with the row? 
3

: 사이에 하나 개의 단어가있을 경우

import re 
regex = re.compile(
r"""(?x) 
(?<= # Assert that the text before the current location is: 
\b  # word boundary 
int # "int" 
\s  # whitespace 
)  # End of lookbehind 
[^=]* # Match any number of characters except = 
(?<!\s) # Assert that the previous character isn't whitespace. 
(?=  # Assert that the following text is: 
\s* # optional whitespace 
=  # "=" 
)  # end of lookahead""") 
with open(filename) as fn: 
    text = fn.read() 
    matches = regex.findall(text) 

다음은 현재 스크립트입니다 int=이면 정규식은 조금 더 간단합니다.

regex = re.compile(
r"""(?x) 
(?<= # Assert that the text before the current location is: 
\b  # word boundary 
int # "int" 
\s  # whitespace 
)  # End of lookbehind 
[^=\s]* # Match any number of characters except = or space 
(?=  # Assert that the following text is: 
\s* # optional whitespace 
=  # "=" 
)  # end of lookahead""") 
+0

'[^ =] * # = '를 제외한 임의의 수의 문자와 일치하는 문자는 공백과 일치합니다. '[^ =] *'(또는'\ s')이어야합니다. – jsz

+0

좋은 생각인지 확실하지 않습니다. 공백이 의도 한 일치 항목에 포함될 수 있는지 누가 알 수 있습니까? –

+0

글쎄, 그냥 다음과 (? =)'와 일치하지 않습니다. '[^]'에있는 것은 다음과 같은 ('=)'와 일치해야합니다. 의도 한 일치 항목에 공백이 포함될 수 있다면, 왜 선구자에'\ s'를 포함시켜야할까요? – jsz

0

당신이 빠르고 더러운 방법을 원한다면 당신은 유닉스 계열의 시스템을 사용하고 있습니다.

파일에 grep 만 사용해야합니다. 그런 다음 원하는 패턴과 데이터를 인식하기 위해 문자열을 분할합니다.

1

전체 텍스트에 대해 정규 표현식을 사용합니다 (한 줄로도 할 수 있습니다). 이것은 "int"와 "="사이에있는 문자열을 출력합니다.

import re 

text = open('example.txt').read() 
print re.findall('(?<=int\s).*?(?=\=)', text) 
+0

고마워요. 저의 목적을 이루고 있습니다. :) – neon