所以基本上我有这个字符串__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;
我怎样才能使这项工作更清洁?
请注意,可能会有嵌套的括号和其他奇怪的内容,因此您需要确保将名称添加在第一个括号之前。
答案 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