代码之家  ›  专栏  ›  技术社区  ›  kurtgn

用于组替换的python正则表达式

  •  0
  • kurtgn  · 技术社区  · 7 年前

    我有一行需要从工作日转换为工作日编号,即。 mon_fri -&燃气轮机; 0_4 . 我用dict创建了一个小工具:

    line = 'mon_fri'
    
    replacement_dict = {
        'mon': '0', 'tue': '1', 'wed': '2',
        'thu': '3', 'fri': '4', 'sat': '5',
        'sun': '6'
    }
    
    for pattern, replacement in replacement_dict.items():
        line = line.replace(pattern, replacement)
    
    print(line)
    

    但有一种方法可以通过使用组的正则表达式来实现。我无法理解regex中的命名组;正确的语法是什么?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Sven Marnach    7 年前

    关于组regex匹配,您可能想了解以下内容:

    line = 'mon_thu'
    m = re.search('(?P<first>[a-z]{3})_(?P<second>[a-z]{3})', line)
    

    然后用

    print('%s_%s' % (replacement_dict[m.group('first')], replacement_dict[m.group('second')]))
    

    虽然我发现您的解决方案更具可读性:)

        2
  •  0
  •   Sven Marnach    7 年前

    我认为你的代码简单明了。如果出于某种原因喜欢使用正则表达式,那么有一种方法:

    pattern = "|".join(map(re.escape, replacement_dict))
    line = re.sub(pattern, lambda m: replacement_dict[m.group()], line)
    

    顺便说一句,你把工作日的数字弄错了。有一种标准化的工作日编号方法,没有理由不遵循它: https://en.wikipedia.org/wiki/ISO_week_date