2012-12-14 60 views
1

替換命名組我怎麼能代替\s+單spance,所有;,,所有a.mAM,所有xy 我是新來命名組更換,我怎麼可能代替字符集來使用單個RegEx和單個sub()調用的替換字符集。的Python:通過字典

如果我可以保留字典中的所有替換字符串,並有一個可能是智能方式的單一RegEx字符串。

Eg: M-Th 5:30 am-10 pm; F 5:30 a.m-10:30 p.m, Sa 10:30-10:30, Su 10:30-10 x y z x 
Output: M-Th 5:30 AM-10 PM, F 5:30 AM - 10:30 PM, Sa 10:30 - 10:30, Su 10:30-10 y y z y 
+0

我想這樣的蟒蛇http://stackoverflow.com/questions/765894/can-i-substitute-多項式-A-單正則表達式功能於VIM-或-perl的 – Garfield

回答

2

試試這個,

mydict = {"\s+":" ", ";":",", "a.m":"AM","x":"y"} 
mystr = "M-Th 5:30 am-10 pm; F 5:30 a.m-10:30 p.m, Sa 10:30-10:30, Su 10:30-10 x y z x" 

for k, v in mydict.iteritems(): 
    mystr = mystr.replace(k, v) 

print mystr 

輸出

M-Th 5:30 am-10 pm, F 5:30 AM-10:30 p.m, Sa 10:30-10:30, Su 10:30-10 y y z y 
1

考慮: -

import re 
def sub(matchobj): 
    if matchobj.group(0) == ';': 
     return ':' 
    elif matchobj.group(0) == 'a.m.': 
     return 'AM' 
    elif re.match('\\s+$', matchobj.group(0)): 
     return ' ' 

print re.sub(';|\\s+|a.m.', sub, '10; a.m.   ;') 

採樣運行: -

C:\>python st.py 
10:AM 

或許(從阿馬爾其解決借用我喜歡的是簡潔:): -

import re 
mydict = {"\s+":" ", ";":",", "a.m":"AM","x":"y"} 

def sub(matchobj): 
    for k, v in mydict.iteritems(): 
     if re.match('%s$' % k, matchobj.group(0)): 
      return v 

print re.sub('|'.join(mydict.keys()), sub, 'M-Th 5:30 am-10 pm; F 5:30 a.m-10:30 p.m, Sa 10:30-10:30, Su 10:30-10 x y z x') 

這也適用: -

C:\>python st.py 
M-Th 5:30 am-10 pm, F 5:30 AM-10:30 p.m, Sa 10:30-10:30, Su 10:30-10 y y