gpt4 book ai didi

python - 如何标记正则表达式模式并对结果列表进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:45 24 4
gpt4 key购买 nike

我有一个看起来像这样的文件:

select a,b,c FROM Xtable
select a,b,c FROM Vtable
select a,b,c FROM Atable
select a,b,c FROM Atable
select d,e,f FROM Atable

我想得到一个 sortedMap:

{
"Atable":["select a,b,c FROM Atable", "select d,e,f FROM Atable"],
"Vtable":["select a,b,c FROM Vtable"],
"Xtable":["select a,b,c FROM Xtable"]
}

sortedMap 的键是表名,值是列表中的文本行。

我从这个开始,但坚持对正则表达式匹配的行进行标记:

import re

f = open('mytext.txt', 'r')
x = f.readlines()
print x
f.close()
for i in x:
p = re.search(".* FROM ", i)
//now how to tokenize and get the value that follows FROM

最佳答案

您可以结合使用 defaultdict 和正则表达式。让 lines 成为你的线路列表:

from collections import defaultdict
pattern = "(select .+ from (\S+).*)"
results = defaultdict(list)

for line in lines:
query, table = re.findall(pattern, line.strip(), flags=re.I)[0]
results[table].append(query)

实际上,读取文件的正确方法是:

with open('mytext.txt') as infile:
for line in infile:
query, table = re.findall(pattern, line.strip(), flags=re.I)[0]
results[table].append(query)

结果自然是一个 defaultdict。如果要将其转换为有序字典,调用字典构造函数:

from collections import OrderedDict
OrderedDict(sorted(results.items()))
#OrderedDict([('Atable', ['select a,b,c FROM Atable', ...

您可以使模式更健壮,以跟踪逗号、有效标识符等。

关于python - 如何标记正则表达式模式并对结果列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56387054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com