python正则表达式用于组替换

时间:2018-07-11 13:39:50

标签: python regex

我有一行需要从工作日数转换为工作日数,即mon_fri-> 0_4。我使用字典创建了一个小工具:

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)

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

2 个答案:

答案 0 :(得分:0)

我认为您的代码很简单,也很清晰。如果您出于某种原因更喜欢使用正则表达式,则可以采用以下一种方法:

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

答案 1 :(得分:0)

关于组正则表达式匹配,您可能想知道的是:

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')]))

尽管我发现您的解决方案更易读:)