我有标记化的名称(字符串),标记用下划线分隔,它们总是包含一个“边”标记,其值为M,L或R.
该值的存在保证是唯一的(没有其他令牌可能获得类似值的重复或危险)。 例如:
foo_M_bar_type
foo_R_bar_type
foo_L_bar_type
我希望,在单个正则表达式中,只要找到 L R ,反之亦然,并且 M 保持不变。 以上IE将成为:
foo_M_bar_type
foo_L_bar_type
foo_R_bar_type
当推动这个理想的表达时。
在我写一些简单的东西时,我认为这是一个10分钟的练习,我不能像我想的那样简洁。
问题本身当然是微不足道的,可以用一个改变模式的条件来解决,但是我喜欢在一个re.sub()中做一些帮助。 当然,任何值得思考的东西都是受欢迎的,但这是一次智力锻炼,我和几个同事都失败了,我很乐意看到它破裂了。
是的,我完全清楚它可能不会被认为是非常Pythonic,也不是理想的,用正则表达式来解决问题,但是幽默我请:)
提前致谢
答案 0 :(得分:3)
这个答案[ab]使用替换功能:
>>> s = "foo_M_bar_type foo_R_bar_type foo_L_bar_type"
>>> import re
>>> re.sub("_[LR]_", lambda m: {'_L_':'_R_','_R_':'_L_'}[m.group()], s)
'foo_M_bar_type foo_L_bar_type foo_R_bar_type'
>>>