【问题标题】:Convert all letters to uppercase except those following a backslash将所有字母转换为大写字母,反斜杠后面的字母除外
【发布时间】:2015-01-17 11:35:48
【问题描述】:

我有以下 8 位十六进制字符串 \x00\x13\xa2\x00@\n!\x1c 所需的输出是'\x00\x13\xA2\x00@\n!\x1C'

我需要将所有字母更改为大写字母,\ 后面的字母除外

我试图通过将整个字符串变成 Caps 并将 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)

【问题讨论】:

  • 你试过了吗?如果是,请添加一些代码:)
  • 这与 XBee 有什么关系?还是使用“十六进制”?
  • mysourceaddrlong = \x00\x13\xa2\x00@\n!\x1c 不是 python 兄弟
  • \x00\x13\xa2\x00@\n!\x1c 是我想与之交谈的 xbee 的十六进制地址,也就是接收 xbee 的 dest_addr_long。
  • 尝试在反斜杠上拆分,将每个元素转换为 xXXXX 并使用反斜杠分隔重新组装。

标签: python regex string


【解决方案1】:

您根本不需要 RegEx。你可以使用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

【讨论】:

  • 关闭,但不解决仍然是大写字母的N。
  • 你确定这行得通吗?您正在处理 s 而不是 mysourceaddrlong
  • 我认为您没有得到答案中的输出
  • @PadraicCunningham 再次抱歉,s 实际上是 mysourceaddrlong.split('\\')
  • 谢谢@PadraicCunningham(你真是太棒了,你帮助每个人纠正他们的答案,不像其他几个人)
猜你喜欢
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多