假设我有以下字符串(它不是字典)
"RandomText...Name1: a, randomtext, Name2: b, Value:1, randomtext Name1: c, Name2: d, Value:2, Name1: e, Name2: f, Value:3, ...RandomText"
在您看来,哪种方式最有效的方法是查找“值:x”,其中x是任意数字,并用“test”替换仅之前的Name1?
例如,如果x是2,我最终会得到:
"Randomtext...Name1: a, randomtext, Name2: b, Value:1, randomtext, Name1:test, Name2: d, Value:2, Name1: e, Name2: f, Value:3, ...RandomText"
它们是字符串,不能表示为dictionarys或其他python对象。
答案 0 :(得分:2)
我建议re.sub()函数使用特定的正则表达式模式(仅适用于您的测试用例):
import re
s = "RandomText...Name1: a, Name2: b, Value:1, Name1: c, Name2: d, Value:2, Name1: e, Name2: f, Value:3, ...RandomText"
x = 2
result = re.sub(r'(Name1: )[a-z](?=, Name2: [a-z]+, Value:'+ str(x) +')', '\\1test', s)
print(result)
输出:
RandomText...Name1: a, Name2: b, Value:1, Name1: test, Name2: d, Value:2, Name1: e, Name2: f, Value:3, ...RandomText
(?=...)
- 正向前瞻断言,确保Name1
子字符串后跟Name2
和Value
(带有所需值)子字符串/属性