Regex替换多个单词,使用它们来构建lis

2024-05-19 20:12:12 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道我如何最好地将文本中[word]的所有实例替换为%s,然后生成这些[word]的列表或元组?在

基本上,我正在生成PDF—我存储在数据库文本字段中的PDF文本—假设它看起来像:

“你好[病人],你在[日期]做了一项研究。”

在动态生成PDF时,我希望传递PDF生成器:

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

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


Tags: 实例文本you数据库hello列表pdfon
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'

使用re.sub但具有不同模式的相同解决方案:

>>> inp = "Hello [patient], you had a study on [date]."
>>> 
>>> re.sub(r'\[.*?\]', '%s', inp)
'Hello %s, you had a study on %s.'

如果您愿意用dictionary之类的数据对象中的值替换这些参数,例如:

^{pr2}$

然后我会这样做:

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

请尝试以下模式:

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

相关问题 更多 >