一个模版系统
这是程序:
#!/usr/bin/env python
# templates.py
import fileinput, re
# Match strings in [ ]
field_pat = re.compile(r'\[(.+?)\]')
# Collect variables
scope = {}
# for re.sub
def replacement(match):
code = match.group(1)
try:
# If string can be evaluate out a value, return it.
return str(eval(code, scope))
except SyntaxError:
# else exec the assignment statement in action scope.
exec code in scope
# ...... return empty string
return ''
# Get all text in a string
# Also, there is another way, consider Chapter 11
lines = []
for line in fileinput.input():
lines.append(line)
text = ''.join(lines)
# replace all items match field pattern
print field_pat.sub(replacement, text)
另外这是 strings.txt 文件内的内容:
[x = 2]
[y = 3]
The sum of [x] and [y] is [x + y]
运行结果如下:
The sum of 2 and 3 is 5
我的疑问是:
程序的最后一行
print field_pat.sub(replacement, text)
为何只有两个参数?
根据官方对 re.sub() 的文档,re.sub() 的最少参数是3个。
官方文档
还是文档検索と置換:
(@selfbootさんのレシピと一緒にお召し上がりください)
field_pat.sub(replacement, text)
はre.sub()
ではありません...はい
Python2
sub(repl, string, count=0)
コンパイルされたパターンを使用する、sub() 関数と同じです。
Python2-sub
リーリーPython3
regex.sub(repl, string, count=0)
コンパイルされたパターンを使用する、sub() 関数と同じです。
Python3 - regex.sub
リーリー私が回答した質問: Python-QA