re.sub
을 사용하여 문자열의 일부를 대체하고 싶습니다. 정확히 어떻게 생겼는지 알고 있습니다. 코드의 관련 부분 : 내 테스트 경우정규식 검색을 포함하여 변수 문자열을 대체하고 대체합니다.
print "Regex statement: ", foundStatements[iterator]
print "string to replace with : \n", latexPreparedString
print "string to search&replace in: \n", fileAsString
processedString = re.sub(foundStatements[iterator], latexPreparedString, fileAsString)
print "processed string: \n", processedString
이 foundStatements[iterator]
이 "%@import script_example.py (*out =(.|\n)*?return out)"
입니다 그러나 processedString
이 foundStatements[iterator]
를 포함하더라도, processedString
이는 re.sub
작업을 수행하지 않도록 정확하게 fileAsString
것 같습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
EDIT : 좋아, 내가 확실히 정규식 코드를 포함하고 대체하고 싶은 문자열과 관련이있다. 그냥 그것을 해석하는 원시 문자열로 foundStatements[iterator]
해석하는 방법이 있나요? 내가 생각할 수있는 유일한 해결책은 정규식 기호를 \ regexsymbol (예 : * -> \ *) 문자열로 대체하는 함수를 만드는 것이지만 inbuilt 함수로이를 해결하는 방법이 있다는 것을 이해할 수 있습니다 ./
EDIT2 : 음, 단지 re.sub(re.escape(foundStatements[iterator]), latexPreparedString, fileAsString)
로 변경가 보인다 나는 그것이 꽤있다있는 모든 단일 정규 표현식 기호로 작동하는지 확인해야 할 것 때문에 그것은 또한 약간의 과잉을 것 작업. regex 문이 원본 파일의 내용과 충돌하지 않는 경우는 예외입니다. 설명하기 위해 latexPreparedString
은 foundStatements[iterator]
의 정규식 부분을 사용하여 생성됩니다. 정규 표현식이 아무 것도 치지 않을 때 latexPreparedString
을 설정할 수 없어야한다는 것은 논리적이지만, 기본적으로 latexPreparedString = "
을 설정합니다.이 경우 re.sub
은 공백 문자열로 바꾸어야합니다. 아무것도 히트 여기에 코드 순간에 보이는 방법은 다음과 같습니다. 문자열에 정확히 일치를 교체하기위한, pastebin.com/wUedK3LN
foundStatements는 re.findall을 통해 선언되므로 원시 문자열을 만드는 방법을 모르겠습니다. 나는 문제 해결을 위해 해결책을 찾지 못했지만 문제를 해결하는 방법에 대한 답변을 원합니다. 현재 솔루션에서는 모든 히트를 두 번 반복합니다. 한번은 모든 정보를 빼내고, 두 번째는 모든 정보를 대체합니다. 지금까지 내 코드가 이해하기 어려운 경우에는 다음과 같습니다. [link] (http://pastebin.com/Q10gqcXj). 당신이 찾고있는 솔루션을 어디에 삽입하려고하는지 주석 처리 된 것을 볼 수 있습니다. – user2875994
문자열이 다른 함수 (예 :'re.findall')에서 생성 될 때, 어떤 리터럴도 이미 이스케이프됩니다; 문자열을 명시 적으로 정의 할 때 'r'만 있으면됩니다. 당신은 여전히're.escape'을 사용할 필요가 있습니다. – Arithmomaniac