正则表达式替换多个单词,使用它们来构建列表

时间:2016-02-28 02:31:51

标签: python regex string

有谁知道如何用%s最好地替换文本中[word]的所有实例,然后构建那些[word] s的列表或元组?

基本上,我正在生成PDF - 我在数据库中的TextField中存储的PDF文本 - 让我们说它看起来像:

"您好[患者],您在[约会..."

上进行了一项研究

当我动态生成PDF时,我想传递PDF生成器:

"Hello %s, you had a study on %s"%(patient,date)

我对正则表达式并不是很满意。我正在阅读sub和match - 但我想知道是否有一种方法可以替换[words]并在一行代码中构建元组。

3 个答案:

答案 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.'