2010-06-07 4 views
1

나는 트위터 프로필 URL과 다른 사람의 트위터 프로필 URL에 대해 정규 표현식을 가지고있다. 나는 쉽게 URL에서 사용자 이름을 추출 할 수있다.정규식과 그룹의 값에서 문자열을 만드는 방법

>>> twitter_re = re.compile('twitter.com/(?P<username>\w+)/') 
>>> twitter_url = 'twitter.com/dir01/' 
>>> username = twitter_re.search(twitter_url).groups()[0] 
>>> _ 
'dir01' 

하지만 정규식과 사용자 이름이있는 경우 어떻게해야합니까?

+1

정규 표현식에서'.'를 이스케이프하여 실제로'. "와 일치하도록 제안합니다. –

+0

예, 알고 있습니다. 그것은 단지 껍질을 가지고 노는 것입니다, 그 이상은 아닙니다. – dir01

답변

0

당신이 하드 코딩 할 수있는 일반 서식 문자열에 어떤 정규식을 변환하는 솔루션,하지만 뭔가를 찾고하지 않는 경우 :

twitter_url = 'twitter.com/%(username)s/' % {'username': 'dir01'} 

... 당신이 필요로하는 무엇을 제공해야합니다.

좀 더 일반적인 (그러나 믿을 수 없을만큼 강력하지 솔루션을)하려면 다음

import re 

def format_to_re(format): 
    # Replace Python string formatting syntax with named group re syntax. 
    return re.compile(re.sub(r'%\((\w+)\)s', r'(?P<\1>\w+)', format)) 

twitter_format = 'twitter.com/%(username)s/' 
twitter_re = format_to_re(twitter_format) 

m = twitter_re.search('twitter.com/dir01/') 
print m.groupdict() 
print twitter_format % m.groupdict() 

나 제공합니다 :

{'username': 'dir01'} 
twitter.com/dir01/ 

을 그리고 마지막으로, 내가왔다 약간 더 크고 더 완벽한 솔루션 사용 나 자신은 Pattern 클래스 here에서 찾을 수 있습니다.

+0

하지만 일반 솔루션을 찾고 있는데 – dir01

+0

@ dir01 : 좀 더 일반적인 솔루션을 추가했습니다. 마지막 하나는 잔인한 과잉 일지 모르지만 원하는대로 할 수 있습니다. –

+0

문자열 포맷에서 regexp 생성! 매우 귀여운!)))) – dir01

-1

왜 정규식이 필요한가요? 그냥 문자열을 추가하십시오.

base_url = "twitter.com/" 
twt_handle = "dir01" 
twit_url = base_url + twt_handle 
1

Regexen은 양방향 거리가 아닙니다. 문자열을 파싱 할 때 사용할 수 있지만 결과에서 문자열을 다시 생성 할 수는 없습니다. 기본 문자열 보간이나 URI 템플릿 (http://code.google.com/p/uri-templates/ 참조)과 같이 URL을 다시 얻는 다른 방법을 찾아보아야합니다.

+0

정규 표현식은 엄격히 말하자면 이름에서 알 수 있듯이 정규 생성 문법의 속기 양식입니다. 언어에 속하는 * 문자열을 생성합니다. 대부분의 정규 표현식 엔진은 구문 분석 만 지원하지만 생성을 지원하는 다른 라이브러리도 있습니다. –

+0

그래, 내가 원하는 것은 단지 불가능하다, 좋아) – dir01

+0

@ Konrad Rudolph : "사용자 이름의 트위터 URL"과 같이 좁은 생성 규칙을 사용하면 이러한 라이브러리가 틀린 방법 일 것입니다. ;-) – Tomalak

관련 문제