繁体   English   中英

Python:用新字符串替换字符串中的字符RANGE

[英]Python: Replace character RANGE in a string with new string

给定以下字符串:

mystring = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

目标是与其他角色交换角色位置范围。

例如,用ABCDE换出字符20-24。 结果如下所示:

XXXXXXXXXXXXXXXXXXXABCDEXXXXXXXXXXXXXXX

测试:

mystring = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
mystring[20:24] = 'ABCDE'

我收到错误消息: TypeError: 'str' object does not support item assignment

最终目标是可重用的功能,例如:

def replace_chars(some_string, start_char, end_char, replace_string):
    if len(replace_string) == (end_char_pos - start_char_pos + 1):
        some_string[start_char:end_char] = replace_string
    else:
        print "replace string invalid length"
        sys.exit(1)
    return mystring

new_string = replace_chars('XYZXYZ', 2, 4, 'AAA')

我意识到可以将未更改的范围填充到新字符串中:

mystring = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
mystring = mystring[0:19] + 'ABCDE' + mystring[25:38]

但是,这将迫使进行更多的计算,因为这将针对文件中的行发生数千次。 不同的行将具有不同的长度,并且将在不同的字符位置进行交换。 这样做似乎是一个漫长的解决方法,我应该能够直接将其直接插入字符位置。

感谢任何帮助,谢谢!

字符串是不可变的(不可更改)。 但是您可以索引和加入项目。

mystring = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
mystring = 'ABCDE'.join([mystring[:20],mystring[24:]])

'XXXXXXXXXXXXXXXXXXXXABCDEXXXXXXXXXXXXXXXXX'

请小心,因为字符串长度“ ABCDE”以及mystring [:20]和mystring [24:]之间省略的项目数必须相同。

字符串在python中是不可变的! 您必须将字符串分成三部分并将它们连接在一起:)

mystring = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
new_str = "ABCDE"
first_piece = mystring[0:20]
third_piece = mystring[24:len(mystring)]
final_string = first_piece + new_str + third_piece

在python中这并不是严格可行的,但是请考虑使用bytearray与python中的字符串类似的结构,关键区别在于可变性

In [52]: my_stuff = bytearray('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')

In [53]: my_stuff = my_stuff[0:19] + "abcd" + my_stuff[25:38]

In [54]: print my_stuff
XXXXXXXXXXXXXXXXXXXabcdXXXXXXXXXXXXX

使用字节数组时,您应该了解一些关键的知识,您可以在此处看到其中的一些知识

尽管您认为应该可以分配给字符串的各个字符,但'str' object does not support item assignment ,但您不能这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM