문자열 (예 : text.replace (a, b) .replace (c, d))에서 '대체'체인을 수행하는 것 이외에 여러 문자열 대체를 수행하는 권장 방법이 있습니까? replace (e, f) ...)? 예를 들어 파이썬에서 PHP의 htmlspecialchars처럼 동작하는 빠른 함수를 어떻게 구현합니까?Python에서 다중 문자열 대체를 수행하는 가장 빠른 구현
필자는 (1) 다중 대체 방법, (2) 정규 표현 방법 및 (3) 매트 앤더슨 방법을 비교했다.
100에 문자 :
TIME: 0 ms [ replace_method(str) ] TIME: 5 ms [ regular_expression_method(str, dict) ] TIME: 1 ms [ matts_multi_replace_method(list, str) ]
1000 문자 :
TIME: 0 ms [ replace_method(str) ] TIME: 3 ms [ regular_expression_method(str, dict) ] TIME: 2 ms [ matts_multi_replace_method(list, str) ]
10000에 문자 :
다음과 같이 N = 10 타점는 결과를 내놓았다
TIME: 3 ms [ replace_method(str) ] TIME: 7 ms [ regular_expression_method(str, dict) ] TIME: 5 ms [ matts_multi_replace_method(list, str) ]
100000 자 :
TIME: 36 ms [ replace_method(str) ] TIME: 46 ms [ regular_expression_method(str, dict) ] TIME: 39 ms [ matts_multi_replace_method(list, str) ]
1000000에 문자 :
TIME: 318 ms [ replace_method(str) ] TIME: 360 ms [ regular_expression_method(str, dict) ] TIME: 320 ms [ matts_multi_replace_method(list, str) ]
3,687,809에 문자 : 매트에
TIME: 1.277524 sec [ replace_method(str) ] TIME: 1.290590 sec [ regular_expression_method(str, dict) ] TIME: 1.116601 sec [ matts_multi_replace_method(list, str) ]
그래서 명성 상당히 큰 입력 문자열에 멀티 '대체'방법을 치기위한 .
누구나 작은 문자열로 박살내는 아이디어가 있습니까?
여기에서 좋은 토론 http://stackoverflow.com/questions/3367809/efficiently-carry-out-multiple-string-replacements-how-to-create-lookup-table –
Tim, 페이지에 대한 유용한 의견 만 있습니다. 하나는 알렉스입니다. 그는 5 개의 치환 쌍을 가진 3.5M 크기의 문서에서 느린 것으로 검증 된 선형 정규 표현식 대체 메소드에 대한 예제를 제공합니다. 그래서 그것은 나에게 새로운 아이디어를 제공하지 않습니다. – OTZ
첫 번째 대체의 결과가 다음 대체에 참여할 수 있어야합니다 (예 : 대체 체인의 예 에서처럼)? 아니면 모든 대용 문자가 원래 텍스트에서만 작동하도록 하시겠습니까? 후자의 경우 중첩되거나 충돌이 발생하는 경우 우선 순위를 지정하는 방법에 대해 염두에 두어야 할 사항이 있습니까? –