有谁知道如何用%s最好地替换文本中[word]的所有实例,然后构建那些[word] s的列表或元组?
基本上,我正在生成PDF - 我在数据库中的TextField中存储的PDF文本 - 让我们说它看起来像:
"您好[患者],您在[约会..."
上进行了一项研究当我动态生成PDF时,我想传递PDF生成器:
"Hello %s, you had a study on %s"%(patient,date)
我对正则表达式并不是很满意。我正在阅读sub和match - 但我想知道是否有一种方法可以替换[words]并在一行代码中构建元组。
答案 0 :(得分:3)
您可以在没有正则表达式的情况下执行此操作。考虑:
>>> tgt="Hello [patient], you had a study on [date]"
>>> template=tgt.replace('[', '{').replace(']', '}')
>>> data={'patient':'Bob', 'date':'10/24/2013'}
>>> template.format(**data)
'Hello Bob, you had a study on 10/24/2013'
答案 1 :(得分:1)
请尝试这种模式:
>>> import re
>>> input = "Hello [patient], you had a study on [date 10-10-16]."
>>> re.sub('\[[^\]]+]', '%s', input)
'Hello %s, you had a study on %s.'
答案 2 :(得分:0)
使用re.sub
使用不同模式的相同解决方案:
>>> inp = "Hello [patient], you had a study on [date]."
>>>
>>> re.sub(r'\[.*?\]', '%s', inp)
'Hello %s, you had a study on %s.'
如果您愿意使用数据对象(例如字典)中的值替换这些参数:
>>> data
{'date': '10/24/2013', 'patient': 'Bob'}
然后我会这样做:
>>> inp = "Hello [patient], you had a study on [date]."
>>> data
{'date': '10/24/2013', 'patient': 'Bob'}
>>>
>>> pat = re.compile(r'\[(?P<param>.*?)\]')
>>> pat.sub(lambda m: data[m.group('param')], inp)
'Hello Bob, you had a study on 10/24/2013.'