我有一个来自 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的“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进行测试,直到得到您需要的表达式。
就像 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),
);