2017-12-19 1 views
1

현재 문장에서 기호를 제거하기 위해 다음 정규식 패턴을 사용하고 있습니다.특정 기호를 제외한 정규식을 확인하십시오.

sentence = re.sub("[^a-zA-Z]"," ", sentence) 

그러나, 나는 모든 -을 유지하고 문장에있는 모든 다른 기호를 제거합니다.

예를 들어, 아래 문장에서 나는 다음과 같은 출력을 얻고 싶습니다.

Input: tim-tam is a tasty, yummy chocolate. 
Output: tim-tam is a tasty yummy chocolate 

어떻게 이것을 수행하기 위해 현재 정규 표현식 패턴을 개선 할 수 있습니까?

답변

4

regular expression syntax을 참조하십시오.

[^a-zA-Z]은 a-z 또는 A-Z 범위에없는 문자를 의미합니다.

범위를 벗어난 문자는 세트를 보완하여 일치시킬 수 있습니다. 집합의 첫 번째 문자가 '^'이면 집합에 포함되지 않은 모든 문자가 일치합니다. 예를 들어, [^ 5]는 '5'를 제외한 모든 문자와 일치하고 [^^]는 '^'을 제외한 모든 문자와 일치합니다.^집합의 첫 번째 문자가 아닌 경우 특별한 의미가 없습니다. 당신은 또한 -을 제외 할 경우

, 그것이 포함이 현재 정규식

sentence = re.sub("[^a-zA-Z]"," ", sentence) 

경우 [^a-zA-Z-]

+0

고맙습니다. 그것은 작동합니다. 나는 이것을 대답으로 받아 들일 것이다. ''s '앞에 나타나는'''을 무시하고 싶습니다. [^ a-zA-Z-s]로 쓰는 것이 맞습니까? 예 : 입력 : '강아지의'음식 '은 끝입니다. 출력 :'강아지의 음식은 끝났습니다. ' –

+1

아니요. 더 복잡한 패턴이됩니다. '[]'는 문자 세트를 나타냅니다. 당신은 부정적인 lookahead (내 대답에 링크 된 문서에서 그것을 찾으십시오)로 그것을 달성 할 수 있습니다. 예를 들면 :'[^ a-zA-Z - '] |'(?! s)'. ''(?! s)'부분은'''에 이어''s ''와 일치합니다. '| '는 또는을 의미합니다. – Galen

0

[^ A-ZA-Z-] A-Z, A-Z 또는 대시하지만

건.

0

을하면, -을 제외 사용할

sentence = re.sub("[^a-zA-Z-]"," ", sentence) 

[]의 시작 부분에있는 캐럿은 "이 C에 있지 않습니다. haracter 클래스 ". 따라서 집합에 -을 추가하면 일치에서 제외됩니다.

+0

고마워요. 그것은 작동합니다. ''s '앞에 나타나는'''을 무시하고 싶습니다. [^ a-zA-Z-s]로 쓰는 것이 맞습니까? 예 : 입력 : '강아지의'음식 '은 완성입니다. 출력 :'강아지의 음식은 끝입니다. ' –

관련 문제