使用Regex解析数据库表名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Regex解析数据库表名相关的知识,希望对你有一定的参考价值。

我有包含数据库表名称的数据。

使用这样的代码:

for l,col in enumerate(data):
#print(data[l][1])
a = data[l][1]
parse = extract_tables(a)
print(parse)

数据是这样的:

['public.actor']
['public.film']
['film']
['film', 'rental', 'inventory']
['inventory i', 'customer c', 'film f', 'rental r']
['customer as c', 'rental as r']

我希望它是这样的:

['actor']
['film']
['film']
['film', 'rental', 'inventory']
['inventory', 'customer', 'film', 'rental']
['customer', 'rental']

我想删除“public”,“as”以及“c”,“f”和“r”之类的别名,这样我才能从数据中获取原始名称表。 (像演员,电影,租赁)。我在python工作。请帮我。谢谢

答案

如果你唯一的情况是从输入中删除public.as x,你可以使用

re.sub("(public.|sas.+)", "", input_string)
另一答案
def clean(string):
    p = string.split()
    if len(p) == 1:
        return p[0].split('.')[-1]
    else:
        return p[0]
另一答案

你知道一组预期的可能的数据库表名吗?好像你会或者能够从数据库中查询它。如果是这样:

database_tables = ['actor', 'film', 'rental', 'inventory', 'customer']
results = []
for db_list in data:
    db_list = [db for db in database_tables if db in ''.join(db_list)]
    results.append(db_list)

如果不这样做,那么您的解决方案将只能与要清理的传入数据的可预测性一样好。有了这套,你有:

result = []
for db_list in data:
    db_list = [db.split('public.')[0] for db in db_list]
    db_list = [db.split(' ')[0] for db in db_list]
    result.append(db_list)

以上是关于使用Regex解析数据库表名的主要内容,如果未能解决你的问题,请参考以下文章

python RegEx模式片段

在 Powershell 中使用 REGEX 解析 SWIFT(财务)消息字符串

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

使用 RegEx 解析具有复杂分隔符的字符串

EF6 自定义迁移表名

使用 Regex / Perl 解析日期列