【问题标题】:how to change specific string order in python如何在python中更改特定的字符串顺序
【发布时间】:2019-01-11 08:03:57
【问题描述】:

使用 Python 2.7 运行 Win 7。我要改字符串:

  • ‘%01#WDD00300003010F123456’

到:

  • ‘%01#WDD0030000301120F5634’

因此,我想将最后 8 个字符从 0F123456 更改为 120F5634。我怎么能写代码来实现呢?

【问题讨论】:

  • 请在发布此问题之前展示您尝试过的内容。

标签: python string python-2.7


【解决方案1】:

砍掉你想要交换数字的位:

s = "%01#WDD00300003010F123456"
sb, se = s[:-8], s[-8:]

现在定义一个函数将se 分解为数字对:

def digit_pairs(s):
    return [s[i:i+2] for i in range(0,len(s),2)]

还有一个可以切换对的功能:

def switch(s):
    for i in range(1,len(s),2):
        yield  s[i]
        yield  s[i-1]

那你就可以了

>>> ''.join(switch(digit_pairs(se)))
'120F5634'

【讨论】:

    【解决方案2】:

    如果您知道要替换多少个字符,列表切片将起作用。

    从空闲:

    >>> longstr = "this is a somewhat lengthy string"
    >>> longstr[:5]
    'this '
    >>> longstr[5:]
    'is a somewhat lengthy string'
    >>> longstr[:-5]
    'this is a somewhat lengthy s'
    >>> longstr = longstr[:-6] + "road"
    >>> longstr
    'this is a somewhat lengthy road'
    

    【讨论】:

      【解决方案3】:

      试试:

      def shuffle(strVal):
          val = strVal[-8:]
          temp = [val[i:i+2] for i in range(0, len(val), 2)]
          res = "" 
          for i in zip(temp[::2], temp[1::2]):
              res = res + "".join([i[1], i[0]])
      
          return strVal[:-8] + res
      
      s =  "%01#WDD00300003010F123456"
      print shuffle(s)
      

      输出:

      %01#WDD0030000301120F5634
      

      【讨论】:

        【解决方案4】:

        再次尝试使用re 模块:

        import re
        
        s = """‘%01#WDD00300003010F123456’"""
        
        print(re.sub(r'(.{2})(.{2})(.{2})(.{2})’', r'\2\1\4\3’', s))
        

        打印:

        ‘%01#WDD0030000301120F5634’
        

        【讨论】:

        • 这与我的回答有何不同?
        • @taras 如果你这么说。我想向 OP 展示如何匹配 HEX 值,因为这就是子字符串的样子,而不是仅仅匹配任何东西。
        【解决方案5】:

        试试这个:替换对你有用。

        a="%01#WDD00300003010F123456"
        a.replace("0F123456","120F5634")
        

        【讨论】:

          【解决方案6】:

          我解决了一个打击:

          str1 = '%01#WDD00300003010F123456'
          ol
          str2 = str1[:-8]
          
          str3 = str2 + '120F5634'
          print(str1)
          print(str3)
          

          【讨论】:

            猜你喜欢
            • 2021-09-20
            • 1970-01-01
            • 2021-12-06
            • 1970-01-01
            • 1970-01-01
            • 2014-06-15
            • 2016-01-08
            • 2021-11-11
            • 1970-01-01
            相关资源
            最近更新 更多