2014-07-17 80 views
0

有四個關鍵詞:titleblogtagsstate
多餘的關鍵字出現正在從各自的比賽中刪除。Python的正則表達式子混亂

示例:
blog: blog state title tags and回報state title tags and代替

blog state title tags and
sub功能應該匹配.+它看到blog:後,所以我不知道爲什麼它把blog作爲例外.+

正則表達式:

re.sub(r'((^|\n|\s|\b)(title|blog|tags|state)(\:\s).+(\n|$))', matcher, a) 

代碼:

def n15(): 
    import re 
    a = """blog: blog: fooblog 
state: private 
title: this is atitle bun 
and text""" 
    kwargs = {} 
    def matcher(string): 
     v = string.group(1).replace(string.group(2), '').replace(string.group(3), '').replace(string.group(4), '').replace(string.group(5), '') 
     if string.group(3) == 'title': 
      kwargs['title'] = v 
     elif string.group(3) == 'blog': 
      kwargs['blog_url'] = v 
     elif string.group(3) == 'tags': 
      kwargs['comma_separated_tags'] = v 
     elif string.group(3) == 'state': 
      kwargs['post_state'] = v 
     return '' 
    a = re.sub(r'((^|\n|\s|\b)(title|blog|tags|state)(\:\s).+(\n|$))', matcher, a) 
    a = a.replace('\n', '<br />') 
    a = a.replace('\r', '') 
    a = a.replace('"', r'\"') 
    a = '<p>' + a + '</p>' 
    kwargs['body'] = a 
    print kwargs 

輸出:

{'body': '<p>and text</p>', 'post_state': 'private', 'blog_url': 'foo', 'title': 'this is a bun'} 

編輯:
所需的輸出:

{'body': '<p>and text</p>', 'post_state': 'private', 'blog_url': 'fooblog', 'title': 'this is atitle bun'} 
+0

它應該在每行中查找多行或重複。 – Braj

+0

您的預期產出是多少? – hwnd

回答

1
replace(string.group(3), '') 

正在用''取代所有出現的'blog'。

與其嘗試替換匹配字符串的所有其他部分,這將很難找到正確的,我建議捕獲您在原始匹配中實際需要的字符串。

r'((^|\n|\s|\b)(title|blog|tags|state)(\:\s)(.+)(\n|$))' 

它具有.+周圍()捕捉字符串的一部分,然後

v = match.group(5) 

matcher開始。