首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:使用字典替换命名组

Python:使用字典替换命名组
EN

Stack Overflow用户
提问于 2012-12-14 17:52:12
回答 2查看 354关注 0票数 1

如何将\s+替换为单spance,将所有;替换为,,将所有a.m替换为AM,将所有sub替换为x。我不熟悉命名组替换,如何使用单个RegEx和单个sub()调用将字符集替换为替换字符集。

如果我可以将所有替换字符串保存在一个字典中,并且只有一个RegEx字符串,这可能是一种聪明的方法。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-14 18:00:52

尝尝这个,

代码语言:javascript
复制
 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

输出

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2012-12-14 18:00:35

请考虑:

代码语言:javascript
复制
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.          ;')

示例运行:-

代码语言:javascript
复制
C:\>python st.py
10:AM

或者(借用Ammar的话,我喜欢他的解决方案,因为他的解决方案很简洁:)

代码语言:javascript
复制
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')

它也同样有效:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13876256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档