替换python中sql语句中逗号内所有出现的“Key”

问题描述 投票:0回答:2

我有一个来自 mariadb 的转储,我需要编辑。转储包含我想过滤掉的关键语句。

有没有一种方法可以编辑一个字符串,剪切掉所有遵循该模式的子字符串,“Key”,?

输入:

CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
Primary Key(`PersonID`),
Foreign Key(`City`)
);

所需输出:

CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

我想在 python 中迭代包含多个此类语句的文件。

更新:我现在知道第一次尝试询问这个问题很糟糕,我想出了一个正则表达式:

\n(.*Key.*)

过滤掉关键语句。很抱歉一开始以新手和懒惰的方式问这个问题。

python sql regex mariadb
2个回答
2
投票

首先,我们不是 ChatGPT - 请在发布到 SO 之前尝试自己想出一些东西。 这次我要破例了。

我们可以使用Python的“re”模块(用于正则表达式)来删除遵循模式“Key”的子字符串。

import re

# your input
input_string = """
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
Primary Key(`PersonID`),
Foreign Key(`City`)
);
"""

# pattern to look for 
pattern = r".*Key\([^)]*\)\s*,|.*Key\([^)]*\)\s*"

# remove all substrings that match the pattern
output_string = re.sub(pattern, "", input_string)

# print output
print(output_string)

输出:

CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

要了解您需要什么正则表达式,您可以使用这个网站RegExr进行测试,直到得到您需要的表达式。


2
投票

就像 Michael 已经说过的,我们不是 ChatGPT。

不使用正则表达式的类似解决方案如下

data = """CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
Primary Key(`PersonID`),
Foreign Key(`City`)
);"""

#split into individual lines
dataArr = data.split("\n")

#function which returns whether string (x) contains 'Key' or not
def containsKey(x):
    return ("Key" not in x)

#returns new array with elements containing 'Key' removed
dataArr = filter(containsKey,dataArr)

#joins lines into single string
data = "\n".join(dataArr)
print(data)

输出:

CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
);
© www.soinside.com 2019 - 2024. All rights reserved.