2014-01-19 4 views
0

정규 표현식을 작성하여 특정 위치에 공백을 삽입하려고합니다. 그래서 #WORD < WORD가 변수입니다파이썬 정규 표현식을 찾아서 바꾸기

는만큼, 무엇이든 될 수있을 것이다 HTML 파일을 읽고 #WORD<tag 사이에 공백을 삽입하기 위해 노력하고 그와 같은 실제 단어 (문자열)

<p style="text-align: left;" data-redator="true"> #deeds</p><p style="text-align: left;" data-redator="true"></p><p style="text-align: left;" data-redator="true">this is it #$%$%$ dkfj dlkjf dklfj </p> 

에서 .. 위의 예는, 나는 그래서 내가 교체의 re.sub 문자열을 사용하려고 #deeds </p>

#deeds</p>에 공백을 삽입 할하지만 난 사이에 변수를 유지하면서 교체하는 방법을 모르는

어떤 조언이 필요합니까?

업데이트 나는이 답변 중 하나를 제공하고 그것을 잘 작동하지만, 문제는 유니 코드 문자에 작동하지 않을 것입니다 시도했다. 나는 아래의 HTML

<p style="text-align: left;" data-redator="true"> #$^$%^</p><p style="text-align: left;" data-redator="true"></p><p style="text-align: left;" data-redator="true"> #sdkjf #الكويت</p><p style="text-align: left;" data-redator="true"></p><p style="text-align: left;" data-redator="true"></p> 

어떤 제안의 예입니다 아랍어

re.sub(ur'(#\w+)(<)', ur'\1 \2', c, flags=re.UNICODE) 

처럼 영어 단어가 아니라 유니 코드 문자를 집어 들고, 다음과 같은 조정을하려고? re.UNICODE 플래그를 사용하고 유니 코드를 구문 분석하기 위해 정규 표현식 앞에 ur를 사용하려고 시도했지만 행운이 없었습니다.

+4

우리가 시도한 것을 보여주고, 단지 설명하지 마십시오. 코드가 무엇인지 추측해야한다면 코드에 어떤 문제가 있는지 알 수 없습니다. – abarnert

+1

한편 HTML을 정규 언어로 사용하지 않기 때문에 정규 표현식으로 HTML을 구문 분석하는 것은 일반적으로 좋지 않습니다. 빠르고 & 더러운 해킹을 위해 때때로 유용 할 수 있지만이 페이지에서 코드를 실행하는 것을 상상해보십시오. 페이지의 컨텍스트와 구조를 갖지 않고 예제의 내부에서 실제로 '# 증서'를 어떻게 알 수 있습니까? – abarnert

답변

3

패턴을 표시하지 않았으므로, 그것을 작동하게하고, 잘하면 그것이 귀하의 패턴 작동하도록하는 방법을 보여줄 것입니다.

그래서 :

바보 같은 패턴의
r = re.compile(r'#[a-z]+<') 

하지만 예를 들어 역할을 그래서, #deeds< 일치합니다. 그렇다면 올바른 위치에 어떻게 공간을 삽입합니까?

r = re.compile(r'(#[a-z]+)(<)') 

그리고 지금, 당신이 그 그룹에 대한 참조를 사용할 수 있습니다 : 당신이해야 할 일은

은 별도의 그룹로 캡처이기 때문에,

r.sub(r'\1 \2', s) 

(이 경우 귀하의 그룹 2는 정적 문자열입니다. 약간 단순화 할 수 있습니다. <을 그룹에 넣지 않고 단지 r'\1 <'을 사용하십시오.하지만이 방법이 더 읽기 쉽고 확실히 나중에 더 유연하고 견고하다고 생각합니다. y 성능 비용은 매우 적습니다.)

Regular Expression Syntax의 문서는 캡쳐 그룹을 만드는 방법을 보여줍니다 (선택 사항 이름 및 re.sub에서 참조하는 방법). 자세한 내용은 '그룹에 대한 참조 컨텍스트'의 'quote' '차트로 스크롤하십시오. 또한 re.sub을 참조하십시오.

1

나는 당신의 높은 수준의 문제가 생각에이 개 적절한 솔루션을있다 :

  • 어느 쪽이든 당신은 완전히 당신이 단순히 (예 : 마코와 같은 템플릿 엔진을 사용해야하는 경우에는 HTML 페이지에 자신을 생성하고 http://www.makotemplates.org/), 줄을 서서히 줄일 수 있습니다.
  • 다른 사람이 작성한 HTML 페이지를 변경하려고합니다. 정규 표현식으로 HTML을 구문 분석하면 통증이 생기기 때문에 적절한 HTML 파서 (예 : lxml.html - http://lxml.de/lxmlhtml.html)를 사용하고 싶습니다. 괴로움.
관련 문제