2013-07-23 2 views
0

텍스트 파일 (예 : test.txt)이 있습니다.변수 입력이있는 python 정규식

a ...... 
aa ...... 
a+a ..... 
aa+ ..... 
a+ ..... 
aaa ..... 
......... 

이제 특정 문자열의 줄 번호를 찾고 싶습니다. 예 : 'a', 'aa +'등. 나는 정규식을 사용하여 입력 문자열의 정확한 일치를 찾으려고 노력했다.

name='a' 

import re 
p = re.compile(r'\b'+re.escape(name)+ r'\b') 

i=0 
with open('test.txt') as inpfile: 
    for num, line in enumerate(inpfile): 
     if p.search(line): 
      print num 

프로그램은 "0"만 인쇄하지만 인쇄는 0,2,4입니다.

내 예상 출력된다

name='a' 

출력 : 0

name='aa' 

출력 1

name='aa+' 

출력 : 3 등 ...

는 I 이해 정규 표현식 내가 위에 사용 된 것은 정확하지 않습니다. 그러나 정규 표현식을 컴파일하여 모든 패턴에 대해 원하는 출력을 제공하는 의견/제안을 공유하는 것이 도움이 될 것입니다.

감사합니다.

답변

1

이 아닌 인쇄 2 및 4? a+aa+은 모두 \b으로 지정한 것과 같이 단어 경계로 둘러싸인 a을 포함합니다. 아마도 선의 시작과 끝을 일치 시키려고 할 것입니다. 예 :

name='a' 

import re 
p = re.compile('^'+re.escape(name)+ '$') 

with open('test.txt') as inpfile: 
    for num, line in enumerate(inpfile): 
     if p.search(line.rstrip(r'\n')): 
      print num 

하지만 정확히 일치하는 줄을 찾으려면 정규식을 사용하는 데 문제가 있습니까?

name='a' 

with open('test.txt') as inpfile: 
    for num, line in enumerate(inpfile): 
     if name == line.rstrip(r'\n'): 
      print num 
+0

설명해 주셔서 감사합니다. 실제로 텍스트 파일의 각 줄에 더 많은 내용이 있습니다 .. 난 혼란을 피하기 위해 텍스트 파일을 편집했습니다. 그러나 귀하의 제안을 시도했지만 모든 패턴에 대해 작동하지 않습니다. 추가 의견이 도움이 될 것입니다. – rana

+0

"모든 패턴에서 작동하지 않습니다." 어떤 패턴이 효과가 없으며 대신 무엇이 발생합니까? – kindall

+0

감사합니다, 그 모든 패턴을 위해 일하고. 내 이전의 코멘트에 대해 유감스럽게 생각합니다. 나는 당신의 제안을 시도하는 동안 몇 가지 실수를했다. 도와 줘서 고마워. – rana

1

문제는 정규 표현식의 정확한 의미를 나타냅니다.

에 '는'또 다른 "단어 경계"

을 다음과 그 이유에 일치되는 선 다음에 "단어 경계"0 (A), 2 (A : 평신도 측면에서, 당신은 표현식과 일치하는 + a) 등등. 여기서 공백과 인쇄 할 수없는 문자 (줄의 시작, 줄 끝) 및 '+'는 단어의 끝을 표시합니다.

+0

설명 주셔서 감사합니다 – rana

0

\b을 사용하면 안됩니다. a+a, a+과 일치합니다. 제 생각 엔 ^a$을 원할 것 같습니다.

+0

설명 주셔서 감사합니다. – rana