2017-01-31 1 views
1

문자열에 영숫자, - 및 밑줄 만 사용하고 싶습니다. 그게 전부 야. 사용자 입력 문자열을 받아서 지침을 따르도록 변환하는 메서드를 작성하려고합니다.파이썬을 사용하여 문자열을 유효한 사용자 정의 패턴으로 변환하는 방법은 무엇입니까?

내 정규식은 분명히 a-zA-Z0-9_-입니다. 내가하고 싶은 것은 모든 공백을 -로 바꾸고, 정규식에 속하지 않는 다른 모든 문자를 제거하는 것입니다.

따라서 'Hello, world!' 문자열은 'Hello-world'으로 변환됩니다. 특수 문자가 제거되고 공백이 -로 바뀝니다.

파이썬을 사용하여 가장 효율적인 방법은 무엇입니까? 캐릭터별로 전체 문자열 캐릭터를 반복해야합니까, 아니면 더 좋은 방법이 있습니까? 감사!

+0

당신의 출력이 포함되어 있습니까 자리 : 여기 이 경우 보존 Djangos slugify 기능의 단순화 된 버전이다? 영숫자이지만 정규 표현식을 사용할 수 없습니다. –

+0

대문자를 의도적으로 소문자로 표시합니까? –

+0

제목 URL을 만들 때이 URL이 필요합니까? – ppasler

답변

3

두 개의 sub으로 처리 할 수 ​​있습니다. 1) 공백을 -으로 바꿉니다. 당신이 당신의 문자열에 숫자를 유지하려면

s = 'Hello, world!' 

import re 
re.sub("[^a-zA-Z_-]", "", re.sub("\s+", "-", s)) 
# 'Hello-world' 

: 여기

re.sub("[^a-zA-Z0-9_-]", "", re.sub("\s+", "-", s)) 
# 'Hello-world' 

[^a-zA-Z_-] 편지) (대문자와 소문자가 아닌 단일 문자와 일치 밑줄, 2) 기타 원치 않는 문자를 제거 대쉬는 문자 클래스 []의 끝 부분에 배치해야 범위가 아닌 문자 그대로 처리됩니다.

1

원하는 내용은 콘텐츠의 URL 이름을 생성 할 때 자주 사용됩니다. django.utils.text.slugify에 구현됩니다. slugify 함수는 소문자로 변환합니다.

import re 
def slugify(value): 
    value = re.sub('[^A-Za-z_\s-]', '', value, flags=re.U).strip() 
    return re.sub('[-\s]+', '-', value, flags=re.U) 
print(slugify("Hello World!")) 
# Hello-World 
관련 문제