1

名前付きグループ置換を初めて使用する場合、単一の正規表現と\s+単一 のsub()呼び出しを使用して、文字のセットを置換文字のセットに置き換えるにはどうすればよい;です,か?a.mAMxy

すべての置換文字列をdictに保持し、単一の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
4

2 に答える 2

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
于 2012-12-14T10:00:51.547 に答える
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

またはおそらく(私が簡潔であるために解決策が好きだったAmmarから借りています:):-

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
于 2012-12-14T10:00:35.133 に答える