2009-06-26 5 views
0

나는 내 웹 사이트를 처리 중이며 페이지의 일부 내용을 변경하려고합니다.텍스트, Jython, Regex 바꾸기

나는 다음과 같은 문자열을 교체 걸려 :

in the 
<SPAN class="Bold"> 
More... 
</SPAN> 
column to your right. 

일부 시간은 <span> 태그가없는 것입니다 :

in the 
More... 
column to your right. 

나는 "아래"와 이것을 대체하고 싶습니다. 나는 파이썬에서 간단한 replace()를 사용하여이 작업을 시도했지만 때로는 텍스트에 <span> 태그가 없기 때문에 여러 줄에 있지만 작동하지 않는 것 같습니다. 내 생각은 정규 표현식을 사용하지만 정규 표현식으로 속도를 높이는 것이 아니며 누구나 손을 빌릴 수 있습니까?

import re 
#re.DOTALL is used to make the . match all characters including newline 
regexp = re.compile('in the.*?More\.\.\..*?column to your right\.', re.DOTALL) 
re.sub(regexp, 'below', foo) 
+0

"아래"로 대체 하시겠습니까? "더 ..."부분, 또는 전부입니까? –

+0

두 상황 모두에서이 모든 것을 대체하려고합니다. – RailsSon

+0

텍스트가 항상 동일합니까? 정확히 출력물은 무엇입니까? 텍스트가 항상 동일하지 않다면 "모두"로, (존재하는 경우)과 "기타 ..."를 의미합니까? –

답변

2

파이썬에서이 같은 것, 코드가 수행 할 수는 "foo"문자열의 HTML 텍스트가 가정

import re 
pattern = re.compile('(?:<SPAN class="Bold">\s*)?More\.\.\.(?:\s*</SPAN>)?') 
str = re.sub(pattern, 'below', str) 

(?:…) 구문은 참조 할 수없는 비 캡처 그룹입니다. 역 참조로.

+0

두 개 이상의 HTML 페이지에서이 작업을 실행하면 stackoverflow 오류가 발생합니다. 하드 리턴을 처리하기 위해 re.DOTALL 일 수 있습니다. :/ – RailsSon

+1

@Eef : 내가 알 수있는 한, Jared의 해결책이 효과가있다. 스택 오버플로 메시지를 재현 할 수 없습니다. DOTALL은 스택 오버플로를 야기 할 가능성이 매우 낮습니다. 그것은 단지 Jared가 말한 것을 수행합니다. 'in'과 'More'사이에 무엇이든 (개행을 포함하여) 일치시킬 필요가 있습니다. Jared의 솔루션과 전체 추적 및 오류 메시지를 구현하는 코드를 보여주십시오. –

+0

이 솔루션은 효과가 있었고 문제가 해결되어 더 이상 문제가되지 않는 환경에 문제가있었습니다. 건배 – RailsSon

0

이 시도 :

감사

EEF