여기에 몇 개의 문자열 표현이 약간 섞여 있습니다. 실제 정규 표현식 (언어 특정 기이을 무시) 단지 (문자 그대로 그 9 자)
\*(.*?)\n
그러나
것, 당신이 중 하나를 원시 문자열없이 Java 또는 Python을 사용하고 가정합니다. 당신이 그들을 두 번하지 않은 경우 문자열을 컴파일 할 때
"\\*(.*?)\\n"
이것은이 때문에, 파이썬은 이미 그들을 제거합니다 :이 경우, 에 코드가 백 슬래시를 두 배로하는 메모리에 위의 문자열을 만들 수 있습니다. 그러나 문자열은이 9 자로 다시 컴파일됩니다. \*(.*?)\n
. 이것들을 출력하면 이중 백 슬래시를 포함하는 디스플레이를 얻을 수 있습니다. 하지만 len(string)
으로 전화하면 11
이 아니라 9
이라고 표시됩니다.
9 자만 필요합니다. 그렇다면 파일에 11을 쓰는 이유는 무엇입니까? 11을 쓰면 디스플레이에 백 슬래시가 두 번 이스케이프됩니다. 그러나 open
의 결과로 len(input)
으로 전화하십시오. 11
이 아니고 15
이 아닙니다.
코드에서 정규 표현식을 정의 할 때 항상 원시 문자열을 사용해야하는 이유이기도합니다. 그런 다음 (인용 부호 제외) 추가 이스케이프 필요가 없습니다 :
r"\*(.*?)\n"
다시 9 개 문자로 당신을 떠날 것입니다 (백 슬래시는 문자열의 편집에 그대로 남아 있기 때문에).
작성된대로 정확하게 가져올 수 있습니다.파일에서 이중 백 슬래시를 원하지 않습니다. 비원 (non-raw) 문자열로 작성하는 경우에만 파이썬 코드에서만 사용됩니다. [자세한 내용은이 진행중인 질문을 참조하십시오] (http://stackoverflow.com/questions/12871066/what-exactly-is-a-raw-string-regex-and-how-can-you-use-it) –
감사 도움을 많이. 텍스트 파일에서 정규 표현식을로드하는 방법과이 문제를 해결하는 방법에 대한 게시물을 찾고 있었지만이 파일을 찾지 못했습니다. 이 정규식 테스터 http://re-try.appspot.com/ 파일에서로드 할 문자열을 확인하고 작동하지 않았다, 그래서 내가 해답을 찾았지만 지금은 그것을 가지고 있는지 확인하는 데 사용됩니다. 모두에게 감사드립니다. – user1863555