python – 重新匹配存储和替换同时

我有一个带有多个引用“keyword1:序列号”的文本.我需要更改为“keyword2:序列号”.

我还需要在dict中存储keyword2:number,具体取决于当时解析的条目.

我使用正则表达式替换,我可以再次解析替换引用,如

import re
parser=re.compile(keyword1:(\d+?)\.)
parser2=re.compile((keyword2:\d+\W))
db={}
for entry in entries:
    parser.sub("keyword2\g<2>", entry)
    db[entry]=parser2.search(entry)

但是让我们面对它,这是低效的,使用2个正则表达式和2个解析每个条目.我想知道我是否可以使用函数列出匹配(唯一的序列号),使用理解在这些前面添加keyword2,然后存储它们/命令替换.
我知道finditer()会产生一个匹配对象的列表但是没有所需的函数,除非我进入复杂的路径获取位置,然后替换等等.
问题主要在于我想避免解析两次,对于一个小文本来说它没问题,但是在一个包含数十万个条目的数据库中,以这种方式编码就变得很糟糕.

最佳答案 你能告诉我们一些示例数据吗?

我相信我们可以重写它只使用一个正则表达式:

import re
# adding apostrophes around the regex
# also, making sure that both \. and \W are both good end-delimiters
re.compile('(keyword2:\d+(?:\.|\W))')
db={}
for entry in entries:
    db[entry]=parser.search(entry.replace('keyword1', 'keyword2'))
点赞