<p>您可以保存规则并将其作为json数据类型读取</p>
<ol>
<li><p>保留你的规则</p>
</li>
<li><p>将占位符设置为规则的目标长度,而不是硬编码的n个字符。您可以使用<strong>{}</strong>和<strong>.format()</strong>属性来完成此项工作,如下所示:</p>
<p><code>(?<=PERSONALDETAILS).{{{start}, {end}}}</code></p>
</li>
<li><p>将规则另存为json文件</p>
</li>
<li><p>将规则作为json文件读取</p>
</li>
<li><p>迭代规则(键和值)并替换它们的值</p>
</li>
</ol>
<p><strong>试试这个:</strong></p>
<pre><code>import re
text = "PERSONALDETAILS TESTY MCTESTER 123 TEST DRIVE..."
rules = {"(?<=PERSONALDETAILS).{{{start},{end}}}": "####################################################################################################"}
for each_pattern, each_replacement in rules.items():
text = re.sub(each_pattern.format(start=1, end=100), each_replacement, text)
print(text)
</code></pre>
<p><strong>从json文件读取规则:</strong></p>
<pre><code>import json
with open("rules.json") as json_file:
rules = json.load(json_file)["rules"]
</code></pre>
<p><strong>完整代码:</strong></p>
<pre><code>import re
from json import load, dump
rules = {
"(?<=PERSONALDETAILS_1).{{{start},{end}}}": "#####################################################",
"(?<=PERSONALDETAILS_2).{{{start},{end}}}": "*****************************************************",
"(?<=PERSONALDETAILS_3).{{{start},{end}}}": "=====================================================",
}
with open('rules.json', 'w') as json_file:
dump(rules, json_file)
with open("rules.json") as json_file:
rules = load(json_file)["rules"]
target_text = "PERSONALDETAILS TESTY MCTESTER 123 TEST DRIVE..."
for each_pattern, each_replacement in rules.items():
text = re.sub(each_pattern.format(start=1, end=100), each_replacement, target_text)
print(target_text)
</code></pre>
<p>对这个问题的一些赞扬<a href="https://stackoverflow.com/questions/9079540/how-to-get-around-single-encountered-in-format-string-when-using-format-a">how to get around "Single '}' encountered in format string" when using .format and formatting in printing</a>和<a href="https://stackoverflow.com/users/166749/fred-foo">@fred-fro</a></p>