Python的string模块中的Template类字符串模板用法

WBOY
Freigeben: 2016-07-06 13:29:44
Original
1269 Leute haben es durchsucht

string.Template()
string.Template()内添加替换的字符, 使用"$"符号, 或 在字符串内, 使用"${}"; 调用时使用string.substitute(dict)函数.
可以通过继承"string.Template", 覆盖变量delimiter(定界符)和idpattern(替换格式), 定制不同形式的模板.

代码:

# -*- coding: utf-8 -*- 

import string 
 
template_text = ''''' 
  Delimiter : %% 
  Replaced : %with_underscore 
  Ingored : %notunderscored 
''' 
 
d = {'with_underscore' : 'replaced', 
   'notunderscored' : 'not replaced'} 
 
class MyTemplate(string.Template): 
  delimiter = '%' 
  idpattern = '[a-z]+_[a-z]+' 
   
t = MyTemplate(template_text) 
print('Modified ID pattern: ') 
print(t.safe_substitute(d)) 

Nach dem Login kopieren

输出:

Modified ID pattern:  
 
  Delimiter : % 
  Replaced : replaced 
  Ingored : %notunderscored 

Nach dem Login kopieren

注意: 定界符(delimiter)为"%", 替换模式(idpattern)必须包含下划线, 所以第2个没有进行替换.

正则替换

string.Template的pattern是一个正则表达式, 可以通过覆盖pattern属性, 定义新的正则表达式.
如: 使用新的定界符"{{", 把{{var}}作为变量语法.

代码:

import string 
 
t = string.Template('$var') 
print(t.pattern.pattern) 
 
class MyTemplate(string.Template): 
  delimiter = '{{' 
  pattern = r''''' 
  \{\{(?: 
   (&#63;P<escaped>\{\{) |  # Escape sequence of two delimiters 
   (&#63;P<named>[_a-z][_a-z0-9]*)\}\}   |  # delimiter and a Python identifier 
   {(&#63;P<braced>[_a-z][_a-z0-9]*)}\}\}  |  # delimiter and a braced identifier 
   (&#63;P<invalid>)       # Other ill-formed delimiter exprs 
  ) 
  ''' 
   
t2 = MyTemplate(''''' 
{{{{ 
{{var}} 
''') 
 
print('MATCHES: ', t2.pattern.findall(t2.template)) 
print('SUBSTITUTED: ', t2.safe_substitute(var='replacement')) 

Nach dem Login kopieren

输出:

  \$(&#63;: 
   (&#63;P<escaped>\$) |  # Escape sequence of two delimiters 
   (&#63;P<named>[_a-z][_a-z0-9]*)   |  # delimiter and a Python identifier 
   {(&#63;P<braced>[_a-z][_a-z0-9]*)}  |  # delimiter and a braced identifier 
   (&#63;P<invalid>)       # Other ill-formed delimiter exprs 
  ) 
   
MATCHES: [('{{', '', '', ''), ('', 'var', '', '')] 
SUBSTITUTED:  
{{ 
replacement 
Nach dem Login kopieren

字符串模板的安全替换(safe_substitute)
字符串模板(sting.Template), 替换时, 使用substitute(), 未能提供模板所需的全部参数值时, 会发生异常.
如果使用safe_substitute(), 即安全替换, 则会替换存在的字典值, 保留未存在的替换符号.

代码:

import string 
 
values = {'var' : 'foo'} 
 
t = string.Template('''''$var is here but $ missing is not provided! ''') 
 
 
try: 
  print 'substitute() : ', t.substitute(values) 
except ValueError as err: 
  print 'Error:', str(err) 
   
print 'safe_substitude() : ', t.safe_substitute(values) 
Nach dem Login kopieren

输出:

substitute() : Error: Invalid placeholder in string: line 1, col 18 
safe_substitude() : foo is here but $ missing is not provided!  

Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!