다음과 같은 형식의 위키 텍스트 템플릿에서 Python으로 줄 바꿈을 제거하려고합니다.
{{cite web
|title=Testing
|url=Testing
|editor=Testing
}}
re.sub로 다음 정보를 얻어야합니다.
{{cite web|title=Testing|url=Testing|editor=Testing}}
몇 시간 동안 Python 정규식을 사용해 왔지만 성공하지 못했습니다. 예를 들어 시도했습니다.
while(re.search(r'\{cite web(.*?)([\r\n]+)(.*?)\}\}')):
textmodif=re.sub(r'\{cite web(.*?)([\r\n]+)(.*?)\}\}', r'{cite web\1\3}}', textmodif,re.DOTALL)
그러나 예상대로 작동하지 않습니다 (while 루프가 없어도 첫 줄 바꿈에서는 작동하지 않습니다).
비슷한 질문을 찾았지만 도움이되지 않았습니다 . Regex for MediaWiki wikitext templates . 저는 Python을 처음 접했기 때문에 너무 열심히하지 마세요 :-)
미리 감사드립니다.
에 대한 개행 일치를 켜야합니다 .
. 그렇지 않으면 개행과 일치 하지 않습니다 .
re.search(r'\{cite web(.*?)([\r\n]+)(.*?)\}\}', inputtext, flags=re.DOTALL)
일치하려는 텍스트 전체에 여러 개의 줄 바꿈이 있으므로 한 세트의 연속 된 줄 바꿈 만 일치시키는 것으로는 충분하지 않습니다.
로부터 re.DOTALL
문서 :
'.'
특수 문자를 개행 문자를 포함하여 모든 문자와 일치 시키십시오 . 이 플래그가 없으면 개행을 제외한'.'
모든 항목과 일치 합니다.
한 번의 re.sub()
호출을 사용 cite
하여 루프없이 스탠자 내의 모든 줄 바꿈을 한 번 에 제거 할 수 있습니다 .
re.sub(r'\{cite web.*?[\r\n]+.*?\}\}', lambda m: re.sub('\s*[\r\n]\s*', '', m.group(0)), inputtext, flags=re.DOTALL)
이것은 중첩 된 정규식을 사용하여 일치하는 텍스트에서 하나 이상의 개행 문자가있는 모든 공백을 제거합니다.
데모:
>>> import re
>>> inputtext = '''\
... {{cite web
... |title=Testing
... |url=Testing
... |editor=Testing
... }}
... '''
>>> re.search(r'\{cite web(.*?)([\r\n]+)(.*?)\}\}', inputtext, flags=re.DOTALL)
<_sre.SRE_Match object at 0x10f335458>
>>> re.sub(r'\{cite web.*?[\r\n]+.*?\}\}', lambda m: re.sub('\s*[\r\n]\s*', '', m.group(0)), inputtext, flags=re.DOTALL)
'{{cite web|title=Testing|url=Testing|editor=Testing}}\n'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다