2012-06-14 4 views
1

이 문제가 발생했습니다. RE에 대한 더 나은 처리를 위해 노력하고 있지만 작동하지 않습니다. 나는 그들이 다른 문자열에서 발견되면 지우고 싶은 문자열 목록을 가지고있다. 정규 표현식 대체 Python

은 제외 목록입니다

exclusionList = ['\+','of','<ET>f.','to','the','<L>L.</L>','f.','in','and','see','a','<L>Fr.</L>','as','<ET>ad.','<ET>a.','<PS>v.</PS></XR>', 
      'from','<CF>ab</CF>','or','n.','<L>OFr.</L>','pple.','away','was','with','off,','pa.','on','is','cf.','stem','ad.','which', 
      'by','action','ppl.','Cf.','but','<L>Gr.</L>','be','after','=','The','form','for','an','<XR><RX>prec.</RX></XR>', 
      '<PS>a.</PS></XR>','<L>Eng.</L>','<PS>pref.</PS>','also','L.</L>','<XR><XL>a-</XL>','<XR><XL>-ing</XL><HO>1</HO></XR>.</ET>', 
      'vb.','See','In','<L>OE.</L>','used','it','see','this','not','<PS>prep.</PS><HO>1</HO></XR>','has','a','so','early','s'] 

그리고 이것은 내가 그 단어를 제거하기 위해 사용하고 무엇을 :

첫 번째 단어가 텍스트 파일에서 읽은 문자열입니다
first_word = re.sub(r'\b'+exclusionList[a]+'\b', '',first_word) 

. 이것이 간단 할 것이라는 것을 나는 안다.하지만 나는 RE를 사용하는 방법을 잘 모른다.

감사

+0

변수 'a'의 내용은 무엇입니까? –

답변

3

이 난 단지 추측 할 수 있지만, 아마 당신은 다음과 같이합니다 : 나는 단어를 탈출하고있어

pattern = r'\b({})\b'.format('|'.join(map(re.escape, exclusionList))) 
first_word = re.sub(pattern, '', first_word) 

주, 그래서 그들은 대신에 해석되는, 말 그대로 일치한다 정규 표현식 (그들은 그렇게 보이지 않는 것)으로.

+0

제 생각과 똑같은 생각 이었지만, 더 잘 실현되었습니다. +1. –

+0

@MarkReed 더 나은 것은 없지만 정말 작은 성능 향상을 위해 희생 된 명확성 만이 그 것이다. –

+0

@BlaXpirit : 무슨 뜻인지 보지 마세요. 나는 여기에 다른 것들보다 먼저 가독성을 두었다. –

2

이 번에 모든 트릭을 수행해야합니다

exclusionRegex = r'\b(' + '|'.join(re.escape(word) for word in exclusionList) + r')\b' 
first_word = re.sub(exclusionRegex, '', first_word) 

편집 : 이것은 내 테스트 스크립트입니다

import re 

exclusionList = ['\+','of','<ET>f.','to','the','<L>L.</L>','f.','in','and','see','a','<L>Fr.</L>','as','<ET>ad.','<ET>a.','<PS>v.</PS></XR>', 
      'from','<CF>ab</CF>','or','n.','<L>OFr.</L>','pple.','away','was','with','off,','pa.','on','is','cf.','stem','ad.','which', 
      'by','action','ppl.','Cf.','but','<L>Gr.</L>','be','after','=','The','form','for','an','<XR><RX>prec.</RX></XR>', 
      '<PS>a.</PS></XR>','<L>Eng.</L>','<PS>pref.</PS>','also','L.</L>','<XR><XL>a-</XL>','<XR><XL>-ing</XL><HO>1</HO></XR>.</ET>', 
      'vb.','See','In','<L>OE.</L>','used','it','see','this','not','<PS>prep.</PS><HO>1</HO></XR>','has','a','so','early','s'] 

exclusionRegex = r'\b(' + '|'.join(re.escape(word) for word in exclusionList) + r')\b' 
first_word = 'This is a test of the regex' 
print re.sub(exclusionRegex, '', first_word) 

그리고 이것은 출력 :

이 테스트 정규식

+0

그래, 실제로. 감사합니다, Niklas와 BlaXpirit. –

+0

감사 표시, re.sub에서 구문 오류가 발생합니다. 어떤 제안이든지 –

+0

@EnglishGrad - re.sub는 표현식이 아니라 표현식입니다. 당신은 그것을 무언가에 할당하거나 그렇지 않으면 그것을 사용해야합니다. 내 편집을 참조하십시오. –