python preg_replace translate message to gsm formatted message

时间:2016-12-09 12:57:13

标签: python regex

i am trying to to make a replace in order to send a gsm message later. i use the function below where it takes the message as parameter and convert it to a gsm formatted message.

import re
     @staticmethod
        def gsm_message(message):

            expressions = {
                '/[άΆαΑ]/u': 'A',
                '/[βΒ]/u': 'B',
                '/[έΈεΕ]/u': 'E',
                ......... more
            }

            translated_message = re.sub(expressions.keys(), expressions.values(), message)

            print(translated_message)

the error i get when i am trying to print is: unhashable type: 'list'.

what can i do to make it work?

1 个答案:

答案 0 :(得分:0)

以下适用于Python3。

import re

def gsm_message(message):
    expressions = {
        'ά': 'A',
        'Ά': 'A',
        'α': 'A',
        'Α': 'A',
        'β': 'B',
        'Β': 'B',
        'έ': 'E',
        'Έ': 'E',
        'ε': 'E',
        'Ε': 'E',
    }
    pattern = re.compile('|'.join(expressions.keys()))
    translated_message = pattern.sub(lambda x: expressions[x.group()], message)
    print(translated_message)

message = "ββααέ"
gsm_message(message)

给出:

BBAAE