通过查找非零字符在python中进行字符串拆分

时间:2015-06-19 13:37:35

标签: python python-2.7

我想进行以下拆分:

input: 0x0000007c9226fc output: 7c9226fc
input: 0x000000007c90e8ab output: 7c90e8ab
input: 0x000000007c9220fc output: 7c9220fc

我使用以下代码行来执行此操作,但它不起作用!

split = element.rpartition('0')

我得到了这些错误的输出!

input: 0x000000007c90e8ab output: e8ab
input: 0x000000007c9220fc output: fc

这种分裂的最快方法是什么? 我现在唯一的想法是制作一个循环并执行检查,但这有点耗费时间。

我应该提一下输入中的零个数是不固定的。

6 个答案:

答案 0 :(得分:5)

每个字符串都可以使用基数为16的int()转换为整数。然后转换回字符串。

for s in '0x000000007c9226fc', '0x000000007c90e8ab', '0x000000007c9220fc':
    print '%x' % int(s, 16)

输出

7c9226fc
7c90e8ab
7c9220fc

答案 1 :(得分:4)

input[2:].lstrip('0')

应该这样做。 [2:]跳过前导0x(我假设它始终在那里),然后lstrip('0')从左侧删除所有零。

事实上,我们可以使用lstrip功能删除多个主角来简化:

input.lstrip('x0')

答案 2 :(得分:1)

format对此非常方便:

>>> print '{:x}'.format(0x000000007c90e8ab)
7c90e8ab

>>> print '{:x}'.format(0x000000007c9220fc)
7c9220fc

答案 3 :(得分:0)

在这种特殊情况下你可以做到

your_input[10:]

你很可能想要正确解析这个问题;你分裂非零分离的想法似乎根本不安全。

似乎是the XY problem

答案 4 :(得分:0)

如果字符串中的字符数是常量,那么您可以使用 以下代码。

input = "0x000000007c9226fc"
output = input[10:]

Documentation

此外,由于您使用rpartition defined作为

  

str.rpartition(sep)
  在最后一次出现sep时拆分字符串,并返回包含分隔符之前的部分的3元组,分隔符本身以及分隔符之后的部分。如果找不到分隔符,则返回包含两个空字符串的3元组,后跟字符串本身。

由于您的输入可以有多个0,并且rpartition仅拆分最后一次出现,这是代码中的故障。

答案 5 :(得分:0)

0x00000或其类型的正则表达式为(0x[0]+),而不是用空格替换它。

import re
st="0x000007c922433434000fc"
reg='(0x[0]+)'
rep=re.sub(reg, '',st)
print rep