2014-07-13 3 views
3

단어의 시작과 끝에서 구두점을 모두 제거해야합니다. re.sub을 사용하고 있습니다.파이썬의 문자열을 일치 패턴으로 바꾸기

re.sub(r'(\w.+)(?=[^\w]$)','\1',text) 

밖으로 작동하지 않는 그룹 - 내가 할 모든 명령 줄

+2

입력 및 예상 출력의 더 나은 예를 들어주세요. 단어의 시작/끝 부분에 여러 구두점 문자가있을 수 있습니까? 문자열은 하나 이상의 단어로 구성 될 수 있습니까? – timgeb

+0

여러 문자의 경우이 정규식 패턴'[\ w + \ -] +'을 사용하면'-'로만 분리 된 단어를 얻을 수 있습니다. 하지만 내 질문은 어떻게 패턴과 문자열을 교체하는 것입니다. – mjosh

+0

또는'str.strip'을 사용할 수도 있습니다 ('text'는 단지 하나의 단어입니다). –

답변

1

이가 (그것도 물론, 하나의 단어에 대한 작동합니다) 트릭을 할 것 같은

text = ".adfdf. 'df' !3423? ld! :sdsd" 

여러 단어 문자열이있는 경우 :

>>> re.sub(r'[^\w\s]*(\w+)[^\w\s]*', r'\1', text) 
'adfdf df 3423 ld sdsd' 

공지 사항 r은 r'\1'입니다. 이것은 '\\1'과 같습니다.

>>> re.sub(r'[^\w\s]*(\w+)[^\w\s]*', '\\1', text) 
'adfdf df 3423 ld sdsd' 

추가 읽기 : the backslash plague

1

'\1' 리터럴 문자열이 '\x01'에 해당에 Mihir4.에 대한 ☺.입니다. 당신은 그것을 역행하거나 원시 참조 리터럴을 사용하여 역 참조 그룹 1을 의미해야합니다.

현재, 당신은 캡처 그룹을 사용할 필요가 없습니다.

>>> re.sub(r'^[^-\w]+|[^-\w]$', '', 'Mihir4.') 
'Mihir4' 
+0

Mihir4. 정적이 아닙니다. 단어가 목록에서 나옵니다. – mjosh

+0

@mjosh, 질문에서했던 것처럼''Mihir4.''를'text'로 대체 할 수 있습니다. – falsetru

관련 문제