2015-01-17 2 views
1

У меня есть следующие 8 бит шестнадцатеричная строка \x00\x13\xa2\[email protected]\n!\x1c Нужный выход '\x00\x13\xA2\[email protected]\n!\x1C'Преобразовать все буквы в верхний регистр, за исключением тех, после обратной косой черты

мне нужно сделать это, изменив все буквы колпачков для тех, после \ кроме

Я пытался сделать это, сделав всю строку в Колпачки и сделать N-х и строчные буквы X, но это далеко от идеала

import re 
mysourceaddrlong = (repr(data['source_addr_long'])[1:-1]) 

, который выдает \x00\x13\xa2\[email protected]\n!\x1c

mysourceaddrlongUPPERCASE = mysourceaddrlong.upper() 
    mysourceaddrlongFIXED = re.sub('[XN]+', lambda m: m.group(0).lower(), mysourceaddrlongUPPERCASE) 
+0

Вы что-то пробовали? Если да, добавьте код :) –

+0

Что это касается XBee? Или с «шестнадцатеричным», вообще? –

+1

'mysourceaddrlong = \ x00 \ x13 \ xa2 \ x00 @ \ n! \ X1c' not python bro –

ответ

5

Yoou не нужен RegEx для этого вообще. Вы можете просто использовать str функции

>>> mysourceaddrlong = r"\x00\x13\xa2\[email protected]\n!\x1c" 
>>> "\\".join([(i[0]+i[1:].upper()) for i in mysourceaddrlong.split('\\') if i]) 
'x00\\x13\\xA2\\[email protected]\\n!\\x1C' 

Объединить выражение генератора с объединением, и он будет работать для вас

EDIT

Добавить \ перед, если вы хотите, чтобы это было так

например:

str = 'x00\\x13\\xA2\\[email protected]\\n!\\x1C' # what you get 
str = "\\"+str 
+0

Закрыть, но не решает N, которая по-прежнему является большой буквы. –

+0

Вы уверены, что это работает? Вы работаете над s not mysourceaddrlong –

+0

Я не думаю, что вы получите результат, который у вас есть в своем ответе –