2012-12-14 3 views
0

어떻게 파이썬에서 .txt 파일을 열 수 있으며 파일에있는 그대로 정확한 문자열을 얻을 수 있습니까?Python - .txt에서 정규 표현식을 얻으십시오.

open('regEx.txt', 'r') 

내가 갖는 :

\\\\*(.*?)\\\\n 

가 거기에 내가 파이썬에서 파일을 열 때

\\*(.*?)\\n 

:

나는 정규 표현식의 예를 포함하는 텍스트 파일을 이 파일을 열고 파일에 쓰여진 것과 똑같은 문자열을 얻는 방법?

+5

작성된대로 정확하게 가져올 수 있습니다.파일에서 이중 백 슬래시를 원하지 않습니다. 비원 (non-raw) 문자열로 작성하는 경우에만 파이썬 코드에서만 사용됩니다. [자세한 내용은이 진행중인 질문을 참조하십시오] (http://stackoverflow.com/questions/12871066/what-exactly-is-a-raw-string-regex-and-how-can-you-use-it) –

+0

감사 도움을 많이. 텍스트 파일에서 정규 표현식을로드하는 방법과이 문제를 해결하는 방법에 대한 게시물을 찾고 있었지만이 파일을 찾지 못했습니다. 이 정규식 테스터 http://re-try.appspot.com/ 파일에서로드 할 문자열을 확인하고 작동하지 않았다, 그래서 내가 해답을 찾았지만 지금은 그것을 가지고 있는지 확인하는 데 사용됩니다. 모두에게 감사드립니다. – user1863555

답변

2

여기에 몇 개의 문자열 표현이 약간 섞여 있습니다. 실제 정규 표현식 (언어 특정 기이을 무시) 단지 (문자 그대로 그 9 자)

\*(.*?)\n 

그러나

것, 당신이 중 하나를 원시 문자열없이 Java 또는 Python을 사용하고 가정합니다. 당신이 그들을 두 번하지 않은 경우 문자열을 컴파일 할 때

"\\*(.*?)\\n" 

이것은이 때문에, 파이썬은 이미 그들을 제거합니다 :이 경우, 에 코드가 백 슬래시를 두 배로하는 메모리에 위의 문자열을 만들 수 있습니다. 그러나 문자열은이 9 자로 다시 컴파일됩니다. \*(.*?)\n. 이것들을 출력하면 이중 백 슬래시를 포함하는 디스플레이를 얻을 수 있습니다. 하지만 len(string)으로 전화하면 11이 아니라 9이라고 표시됩니다.

9 자만 필요합니다. 그렇다면 파일에 11을 쓰는 이유는 무엇입니까? 11을 쓰면 디스플레이에 백 슬래시가 두 번 이스케이프됩니다. 그러나 open의 결과로 len(input)으로 전화하십시오. 11이 아니고 15이 아닙니다.

코드에서 정규 표현식을 정의 할 때 항상 원시 문자열을 사용해야하는 이유이기도합니다. 그런 다음 (인용 부호 제외) 추가 이스케이프 필요가 없습니다 :

r"\*(.*?)\n" 

다시 9 개 문자로 당신을 떠날 것입니다 (백 슬래시는 문자열의 편집에 그대로 남아 있기 때문에).

3

파일에있는 그대로의 데이터를 얻을 가능성이 높습니다 (줄 끝 부분을 제외하고는 문제가 아니지만). 문제는 그 데이터를 표시하는 것입니다. 껍질에서 일하고 있니? print을 명시 적으로 사용하지 않으면 이스케이프 시퀀스가 ​​출력됩니다.

print open('regEx.txt', 'rb').read() 또는 open('regEx2.txt','wb').write(open('regEx.txt', 'rb').read())을 사용해보십시오. regEx2.txt는 regEx.txt와 동일합니다. 줄 바꿈에서 별도로

»»» regex # as read from the file 
Out[9]: '\\*(.*?)\\n\n' 

»»» r=r'\*(.*?)\n' 

»»» r 
Out[11]: '\\*(.*?)\\n' 

(내 잘못이다, 내가 파일에 넣어)가 내부적으로 같은 위치 : 나는 그 문제 생각하지 않습니다

0

다음 비교합니다.