将所有字母转换为大写字母,但反斜杠后面的字母除外
Convert all letters to uppercase except those following a backslash
我有以下 8 位十六进制字符串 \x00\x13\xa2\x00@\n!\x1c
期望的输出是 '\x00\x13\xA2\x00@\n!\x1C'
我需要将除 \
之后的所有字母都改为大写来完成此操作
我试图通过将整个字符串变成大写并将 N 和 X 变成小写来做到这一点,但它远非理想
import re
mysourceaddrlong = ( repr(data['source_addr_long'])[1:-1] )
输出\x00\x13\xa2\x00@\n!\x1c
mysourceaddrlongUPPERCASE = mysourceaddrlong.upper()
mysourceaddrlongFIXED = re.sub('[XN]+', lambda m: m.group(0).lower(), mysourceaddrlongUPPERCASE)
你根本不需要正则表达式。您可以只使用 str
函数
>>> mysourceaddrlong = r"\x00\x13\xa2\x00@\n!\x1c"
>>> "\".join([(i[0]+i[1:].upper()) for i in mysourceaddrlong.split('\') if i])
'x00\x13\xA2\x00@\n!\x1C'
将生成器表达式与联接结合起来,它会为您解决
编辑
如果你想在前面加一个\
例如:
str = 'x00\x13\xA2\x00@\n!\x1C' # what you get
str = "\"+str
我有以下 8 位十六进制字符串 \x00\x13\xa2\x00@\n!\x1c
期望的输出是 '\x00\x13\xA2\x00@\n!\x1C'
我需要将除 \
我试图通过将整个字符串变成大写并将 N 和 X 变成小写来做到这一点,但它远非理想
import re
mysourceaddrlong = ( repr(data['source_addr_long'])[1:-1] )
输出\x00\x13\xa2\x00@\n!\x1c
mysourceaddrlongUPPERCASE = mysourceaddrlong.upper()
mysourceaddrlongFIXED = re.sub('[XN]+', lambda m: m.group(0).lower(), mysourceaddrlongUPPERCASE)
你根本不需要正则表达式。您可以只使用 str
函数
>>> mysourceaddrlong = r"\x00\x13\xa2\x00@\n!\x1c"
>>> "\".join([(i[0]+i[1:].upper()) for i in mysourceaddrlong.split('\') if i])
'x00\x13\xA2\x00@\n!\x1C'
将生成器表达式与联接结合起来,它会为您解决
编辑
如果你想在前面加一个\
例如:
str = 'x00\x13\xA2\x00@\n!\x1C' # what you get
str = "\"+str