我有一行需要从工作日数转换为工作日数,即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)
但是有一种方法可以通过使用组的一个正则表达式来实现。我无法绕过正则表达式中的命名组;正确的语法是什么?
答案 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')]))
尽管我发现您的解决方案更易读:)