重新匹配同时存储和替换

时间:2017-05-04 12:31:07

标签: python regex

我有一个带有多个引用“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()会产生一个匹配对象的列表但是没有所需的函数,除非我进入复杂的路径获取位置,然后替换等等。
问题主要在于我想避免解析两次,对于一个小文本它可以,但是在一个包含数十万个条目的数据库中,以这种方式编码就变得很糟糕。

1 个答案:

答案 0 :(得分:1)

您能告诉我们一些示例数据吗?

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

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