删除Python中SQL语句中所有出现的子字符串

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

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

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

输入:

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`)
);
"""

所需输出:

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

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

我尝试了以下正则表达式模式:

\n(.*Key.*)

过滤掉关键语句。还有其他方法吗?

python sql regex mariadb key
2个回答
3
投票

我们可以使用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.