在第一次出现字符之前插入字符串

时间:2019-04-05 18:09:46

标签: python

所以基本上我有这个字符串__int64 __fastcall(IOService *__hidden this);,我需要在__fastcall(可以是任何东西)和(IOService...之间插入一个单词,例如__int64 __fastcall LmaoThisWorks(IOService *__hidden this);。 / p>

我已经考虑过拆分字符串,但这似乎有点过大。我希望有一种更简单,更短的方法:

type_declaration_fun = GetType(fun_addr) # Sample: '__int64 __fastcall(IOService *__hidden this)'
if type_declaration_fun:
    print(type_declaration_fun)
    type_declaration_fun = type_declaration_fun.split(' ')
    first_bit = ''
    others = ''
    funky_list = type_declaration_fun[1].split('(')
    for x in range(0, (len(funky_list))):
        if x == 0:
            first_bit = funky_list[0]
        else:
            others = others + funky_list[x]

    type_declaration_fun = type_declaration_fun[0] + ' ' + funky_list[0] + ' ' + final_addr_name + others
    type_declaration_fun = type_declaration_fun + ";"
    print(type_declaration_fun)

该代码不仅胡扯,而且还行不通。这是一个示例输出:

void *__fastcall(void *objToFree)
void *__fastcall IOFree_stub_IONetworkingFamilyvoid;

我怎样才能使这项工作更清洁?

请注意,可能会有嵌套的括号和其他奇怪的内容,因此您需要确保将名称添加在第一个括号之前。

5 个答案:

答案 0 :(得分:1)

一旦找到需要插入的字符的索引,就可以使用拼接来创建新字符串。

    string = 'abcdefg'
    string_to_insert = '123'
    insert_before_char = 'c'
    for i in range(len(string)):
        if string[i] == insert_before_char:
            string = string[:i] + string_to_insert + string[i:]
            break

答案 1 :(得分:0)

那呢:

s = "__int64__fastcall(IOService *__hidden this);"
t = s.split("__fastcall",1)[0]+"anystring"+s.split("__fastcall",1)[1]

我得到:

__int64__fastcallanystring(IOService *__hidden this);

我希望这就是你想要的。如果没有,请发表评论。

答案 2 :(得分:0)

   x='high speed'
    z='new text' 
    y = x.index('speed')
    x =x[:y] + z +x[y:]
print(x) 
>>> high new textspeed

这是一个简单的示例,请注意y包含在新字符串之后。

要意识到您正在更改原始字符串,或者只是声明一个新字符串。

答案 3 :(得分:0)

使用regex

In [1]: import re

        pattern = r'(?=\()'
        string = '__int64 __fastcall(IOService *__hidden this);'
        re.sub(pattern, 'pizza', string)

Out[1]: '__int64 __fastcallpizza(IOService *__hidden this);'

pattern是积极的前瞻,以匹配(的首次出现。

答案 4 :(得分:0)

您可以使用方法replace()

s = 'ABCDEF'
ins = '$'
before = 'DE'
new_s = s.replace(before, ins + before, 1)

print(new_s)
# ABC$DEF