我基本上有可能就像这样的字符串
str1 = "Z (X) Z"
str2 = "Z .X. Z"
str3 = "Z 'X' Z"
X可能是任何东西,以及Z:例如:
str1 = "(example1) "
str2 = "random_stuff .example2. other_random_stuff"
str3 = "'example3' stuff"
我需要的是用其他东西替换X,但是如果X可以是任何东西我怎么能这样做呢?我必须推断由“..”,“()”,“''”(X部分)分隔的字符串部分,并用其他东西替换它。 Z部分也可以是任何东西,它们不应该被考虑,并且X的东西也可以在字符串的中间找到,所以我无法使用它:
str1 = ".X."
str_to_be_changed = str1[1][-1]
str1.replace(str_to_be_changed, "Y")
谢谢:)
答案 0 :(得分:3)
您使用具有替换功能的正则表达式:
import re
def change_string(string, replacement):
def repl(match):
o, c = match.group('open'), match.group('close')
if o + c in ('..', "''", '()'):
return '{}{}{}'.format(o, replacement, c)
return match.group(0)
return re.sub(r"(?P<open>['.(]).*?(?P<close>['.)])", repl, string)
repl()
函数验证开头和结束字符在替换前是否匹配。
演示:
>>> str1 = ".X."
>>> change_string(str1, 'Y')
'.Y.'
>>> change_string("This is a larger 'example' with (more than one) replacement, including a 'false positive.", 'Y')
"This is a larger 'Y' with (Y) replacement, including a 'false positive."
答案 1 :(得分:1)
尝试使用str.format()
例如:
l = ".{}."
print l.format("mything")
'.mything.'