2013-07-04 6 views
3

파이썬에서는 텍스트를 바꾸기 전에 그룹이 비어 있는지 확인할 수 있습니까?조건부 정규 표현식 대체

예 :

이 사용해야 정규식이다
[user] John Marshal --> [user]<br><strong>Jonh Marshal<strong> 

John Marshal --> <strong>Jonh Marshal<strong> 

하지만 "조건"과 < BR 그룹 1이 발견>에만 삽입하려면.

title = re.sub(r'^\s*(\[.*?\])?\s*(.*)', r'\1<br><strong>\2</strong>', title) 

답변

8

그룹의 하나는 빈 일치 수 있기 때문에 항상 발견 입니다.

당신은 적어도 하나 개의 문자가 아닌 0 개 이상의 일치 할, 그래서 .+?를 사용 : 그룹 하나가 누락 된 경우

title = re.sub(r'^\s*(\[.+?\])?\s*(.*)', r'\1<br><strong>\2</strong>', title) 

지금 경기는 예외가 발생합니다. 그것의 사용을 확인하십시오

def title_sub(match): 
    if match.group(1): 
     return '{}<br><strong>{}</strong>'.format(*match.groups()) 
    return '<strong>{}</strong>'.format(match.group(2)) 

title = re.sub(r'^\s*(\[.+?\])?\s*(.*)', title_sub, title) 

데모 :

>>> re.sub(r'^\s*(\[.+?\])?\s*(.*)', title_sub, '[user] John Marshal') 
'[user]<br><strong>John Marshal</strong>' 
>>> re.sub(r'^\s*(\[.+?\])?\s*(.*)', title_sub, 'John Marshal') 
'<strong>John Marshal</strong>' 
+0

감사를

try: title = re.sub(r'^\s*(\[.+?\])?\s*(.*)', r'\1<br><strong>\2</strong>', title) except re.error: title = re.sub(r'^\s*(.*)', r'<strong>\1</strong>', title) 

대안이 교체 할 수있는 기능을 사용하는 것입니다! 나는 시도를 사용하여 내 문제를 해결합니다. 나는 그것이 순수 정규식으로 가능할 것이라고 생각했다. – Talma

+0

조건부 대체는 수행 할 수 없습니다. –

+0

대체 정규 표현식에서 그룹 이름을 사용할 수없는 함수를 사용할 경우 어떻게해야합니까? – lerner